• Nie Znaleziono Wyników

cwiczenia 4. Z ł o ż one zapytania JPS

N/A
N/A
Protected

Academic year: 2021

Share "cwiczenia 4. Z ł o ż one zapytania JPS"

Copied!
44
0
0

Pełen tekst

(1)
(2)

JPS

Złożone zapytania cwiczenia 4.

© Michał Lentner

Polsko-Japońska Wyższa Szkoła Technik Komputerowych

(3)

Operator group as

(4)

Operator group as

q group as n

q

group as n

(5)

Wykonać eval(q) i zrobić qres = QRES.POP()

Dla całego qres utworzyć binder <n, qres> (inny zapis: n(qres)) i wrzucić go na QRES

Operator group as

q group as n

q

group as n

(6)

Wykonać eval(q) i zrobić qres = QRES.POP()

Dla całego qres utworzyć binder <n, qres> (inny zapis: n(qres)) i wrzucić go na QRES

Operator group as

q group as n

q

group as n

(7)

Wykonać eval(q) i zrobić qres = QRES.POP()

Dla całego qres utworzyć binder <n, qres> (inny zapis: n(qres)) i wrzucić go na QRES

Operator group as

q group as n

q

group as n

Przykłady:

(8)

Wykonać eval(q) i zrobić qres = QRES.POP()

Dla całego qres utworzyć binder <n, qres> (inny zapis: n(qres)) i wrzucić go na QRES

Operator group as

q group as n

q

group as n

Przykłady:

1 group as nazwa = nazwa(1)

(9)

Wykonać eval(q) i zrobić qres = QRES.POP()

Dla całego qres utworzyć binder <n, qres> (inny zapis: n(qres)) i wrzucić go na QRES

Operator group as

q group as n

q

group as n

Przykłady:

1 group as nazwa = nazwa(1)

bag(1, 2, 3) group as nazwa = nazwa(bag(1, 2, 3))

(10)

Wykonać eval(q) i zrobić qres = QRES.POP()

Dla całego qres utworzyć binder <n, qres> (inny zapis: n(qres)) i wrzucić go na QRES

Operator group as

q group as n

q

group as n

Przykłady:

1 group as nazwa = nazwa(1)

bag(1, 2, 3) group as nazwa = nazwa(bag(1, 2, 3)) emp group as nazwa = nazwa(bag(i1, i2, i3))

(11)

Operator as

(12)

Operator as

q as n

q as n

(13)

Wykonać eval(q) i zrobić qres = QRES.POP()

Dla każdego x ∈ qres utworzyć binder <n, x>

Bindery wynikowe trafiają do baga, którego umieszczamy na QRES

Operator as

q as n

q as n

(14)

Wykonać eval(q) i zrobić qres = QRES.POP()

Dla każdego x ∈ qres utworzyć binder <n, x>

Bindery wynikowe trafiają do baga, którego umieszczamy na QRES

Operator as

q as n

q as n

(15)

Wykonać eval(q) i zrobić qres = QRES.POP()

Dla każdego x ∈ qres utworzyć binder <n, x>

Bindery wynikowe trafiają do baga, którego umieszczamy na QRES

Operator as

q as n

q as n

Przykłady:

(16)

Wykonać eval(q) i zrobić qres = QRES.POP()

Dla każdego x ∈ qres utworzyć binder <n, x>

Bindery wynikowe trafiają do baga, którego umieszczamy na QRES

Operator as

q as n

q as n

Przykłady:

1 as nazwa = nazwa(1)

(17)

Wykonać eval(q) i zrobić qres = QRES.POP()

Dla każdego x ∈ qres utworzyć binder <n, x>

Bindery wynikowe trafiają do baga, którego umieszczamy na QRES

Operator as

q as n

q as n

Przykłady:

1 as nazwa = nazwa(1)

bag(1, 2, 3) as nazwa = bag(nazwa(1), nazwa(2), nazwa(3))

(18)

Wykonać eval(q) i zrobić qres = QRES.POP()

Dla każdego x ∈ qres utworzyć binder <n, x>

Bindery wynikowe trafiają do baga, którego umieszczamy na QRES

Operator as

q as n

q as n

Przykłady:

1 as nazwa = nazwa(1)

bag(1, 2, 3) as nazwa = bag(nazwa(1), nazwa(2), nazwa(3))

((1 as nazwa1) as nazwa2) as nazwa3 = nazwa3(nazwa2(nazwa1(1)))

(19)

Wykonać eval(q) i zrobić qres = QRES.POP()

Dla każdego x ∈ qres utworzyć binder <n, x>

Bindery wynikowe trafiają do baga, którego umieszczamy na QRES

Operator as

q as n

q as n

Przykłady:

1 as nazwa = nazwa(1)

bag(1, 2, 3) as nazwa = bag(nazwa(1), nazwa(2), nazwa(3))

((1 as nazwa1) as nazwa2) as nazwa3 = nazwa3(nazwa2(nazwa1(1))) struct(1, 2) as nazwa = nazwa(struct(1, 2))

(20)

Wykonać eval(q) i zrobić qres = QRES.POP()

Dla każdego x ∈ qres utworzyć binder <n, x>

Bindery wynikowe trafiają do baga, którego umieszczamy na QRES

Operator as

q as n

q as n

Przykłady:

1 as nazwa = nazwa(1)

bag(1, 2, 3) as nazwa = bag(nazwa(1), nazwa(2), nazwa(3))

((1 as nazwa1) as nazwa2) as nazwa3 = nazwa3(nazwa2(nazwa1(1))) struct(1, 2) as nazwa = nazwa(struct(1, 2))

emp as nazwa = bag(nazwa(i1), nazwa(i2), nazwa(i3))

(21)

Operator ,

(22)

Operator ,

q1, q2

q1 q2 ,

(23)

Wykonać eval(q1) i eval(q2)

Zrobić q2res = QRES.POP(), q1res = QRES.POP()

Wykonać q1res x q2res

Każda para iloczynu kartezjańskiego tworzy nową strukturę.

Jeśli x ∈ q1res lub y ∈ q1res jest strukturą, to tylko rozszerzamy tę strukturę

Wszystkie struktury tworzą baga, którego umieszczamy na QRES

Operator ,

q1, q2

q1 q2 ,

(24)

Wykonać eval(q1) i eval(q2)

Zrobić q2res = QRES.POP(), q1res = QRES.POP()

Wykonać q1res x q2res

Każda para iloczynu kartezjańskiego tworzy nową strukturę.

Jeśli x ∈ q1res lub y ∈ q1res jest strukturą, to tylko rozszerzamy tę strukturę

Wszystkie struktury tworzą baga, którego umieszczamy na QRES

Operator ,

q1, q2

q1 q2 ,

(25)

Wykonać eval(q1) i eval(q2)

Zrobić q2res = QRES.POP(), q1res = QRES.POP()

Wykonać q1res x q2res

Każda para iloczynu kartezjańskiego tworzy nową strukturę.

Jeśli x ∈ q1res lub y ∈ q1res jest strukturą, to tylko rozszerzamy tę strukturę

Wszystkie struktury tworzą baga, którego umieszczamy na QRES

Przykłady:

Operator ,

q1, q2

q1 q2 ,

(26)

Wykonać eval(q1) i eval(q2)

Zrobić q2res = QRES.POP(), q1res = QRES.POP()

Wykonać q1res x q2res

Każda para iloczynu kartezjańskiego tworzy nową strukturę.

Jeśli x ∈ q1res lub y ∈ q1res jest strukturą, to tylko rozszerzamy tę strukturę

Wszystkie struktury tworzą baga, którego umieszczamy na QRES

Przykłady:

1, 2 = bag(struct(1, 2))

Operator ,

q1, q2

q1 q2 ,

(27)

Wykonać eval(q1) i eval(q2)

Zrobić q2res = QRES.POP(), q1res = QRES.POP()

Wykonać q1res x q2res

Każda para iloczynu kartezjańskiego tworzy nową strukturę.

Jeśli x ∈ q1res lub y ∈ q1res jest strukturą, to tylko rozszerzamy tę strukturę

Wszystkie struktury tworzą baga, którego umieszczamy na QRES

Przykłady:

1, 2 = bag(struct(1, 2))

bag(1, 2), 3 = bag(struct(1, 3), struct(2, 3))

Operator ,

q1, q2

q1 q2 ,

(28)

Wykonać eval(q1) i eval(q2)

Zrobić q2res = QRES.POP(), q1res = QRES.POP()

Wykonać q1res x q2res

Każda para iloczynu kartezjańskiego tworzy nową strukturę.

Jeśli x ∈ q1res lub y ∈ q1res jest strukturą, to tylko rozszerzamy tę strukturę

Wszystkie struktury tworzą baga, którego umieszczamy na QRES

Przykłady:

1, 2 = bag(struct(1, 2))

bag(1, 2), 3 = bag(struct(1, 3), struct(2, 3))

bag(1, 2), bag(3, 4) = bag(struct(1, 3), struct(1, 4), struct(2, 3), struct(2, 4))

Operator ,

q1, q2

q1 q2 ,

(29)

Wykonać eval(q1) i eval(q2)

Zrobić q2res = QRES.POP(), q1res = QRES.POP()

Wykonać q1res x q2res

Każda para iloczynu kartezjańskiego tworzy nową strukturę.

Jeśli x ∈ q1res lub y ∈ q1res jest strukturą, to tylko rozszerzamy tę strukturę

Wszystkie struktury tworzą baga, którego umieszczamy na QRES

Przykłady:

1, 2 = bag(struct(1, 2))

bag(1, 2), 3 = bag(struct(1, 3), struct(2, 3))

bag(1, 2), bag(3, 4) = bag(struct(1, 3), struct(1, 4), struct(2, 3), struct(2, 4)) struct(1, 2), 3 = struct(1, 2, 3)

Operator ,

q1, q2

q1 q2 ,

(30)

Wykonać eval(q1) i eval(q2)

Zrobić q2res = QRES.POP(), q1res = QRES.POP()

Wykonać q1res x q2res

Każda para iloczynu kartezjańskiego tworzy nową strukturę.

Jeśli x ∈ q1res lub y ∈ q1res jest strukturą, to tylko rozszerzamy tę strukturę

Wszystkie struktury tworzą baga, którego umieszczamy na QRES

Przykłady:

1, 2 = bag(struct(1, 2))

bag(1, 2), 3 = bag(struct(1, 3), struct(2, 3))

bag(1, 2), bag(3, 4) = bag(struct(1, 3), struct(1, 4), struct(2, 3), struct(2, 4)) struct(1, 2), 3 = struct(1, 2, 3)

struct(1, 2), bag(3, 4) = bag(struct(1, 2, 3), struct(1, 2, 4))

Operator ,

q1, q2

q1 q2 ,

(31)

Wykonać eval(q1) i eval(q2)

Zrobić q2res = QRES.POP(), q1res = QRES.POP()

Wykonać q1res x q2res

Każda para iloczynu kartezjańskiego tworzy nową strukturę.

Jeśli x ∈ q1res lub y ∈ q1res jest strukturą, to tylko rozszerzamy tę strukturę

Wszystkie struktury tworzą baga, którego umieszczamy na QRES

Przykłady:

1, 2 = bag(struct(1, 2))

bag(1, 2), 3 = bag(struct(1, 3), struct(2, 3))

bag(1, 2), bag(3, 4) = bag(struct(1, 3), struct(1, 4), struct(2, 3), struct(2, 4)) struct(1, 2), 3 = struct(1, 2, 3)

struct(1, 2), bag(3, 4) = bag(struct(1, 2, 3), struct(1, 2, 4)) 1, 2, 3, 4 = bag(struct(1, 2, 3, 4))

Operator ,

q1, q2

q1 q2 ,

(32)

Wykonać eval(q1) i eval(q2)

Zrobić q2res = QRES.POP(), q1res = QRES.POP()

Wykonać q1res x q2res

Każda para iloczynu kartezjańskiego tworzy nową strukturę.

Jeśli x ∈ q1res lub y ∈ q1res jest strukturą, to tylko rozszerzamy tę strukturę

Wszystkie struktury tworzą baga, którego umieszczamy na QRES

Przykłady:

1, 2 = bag(struct(1, 2))

bag(1, 2), 3 = bag(struct(1, 3), struct(2, 3))

bag(1, 2), bag(3, 4) = bag(struct(1, 3), struct(1, 4), struct(2, 3), struct(2, 4)) struct(1, 2), 3 = struct(1, 2, 3)

struct(1, 2), bag(3, 4) = bag(struct(1, 2, 3), struct(1, 2, 4)) 1, 2, 3, 4 = bag(struct(1, 2, 3, 4))

bag(1, 2), 3, 4 = bag(struct(1, 3, 4), struct(2, 3, 4))

Operator ,

q1, q2

q1 q2 ,

(33)

Wykonać eval(q1) i eval(q2)

Zrobić q2res = QRES.POP(), q1res = QRES.POP()

Wykonać q1res x q2res

Każda para iloczynu kartezjańskiego tworzy nową strukturę.

Jeśli x ∈ q1res lub y ∈ q1res jest strukturą, to tylko rozszerzamy tę strukturę

Wszystkie struktury tworzą baga, którego umieszczamy na QRES

Przykłady:

1, 2 = bag(struct(1, 2))

bag(1, 2), 3 = bag(struct(1, 3), struct(2, 3))

bag(1, 2), bag(3, 4) = bag(struct(1, 3), struct(1, 4), struct(2, 3), struct(2, 4)) struct(1, 2), 3 = struct(1, 2, 3)

struct(1, 2), bag(3, 4) = bag(struct(1, 2, 3), struct(1, 2, 4)) 1, 2, 3, 4 = bag(struct(1, 2, 3, 4))

bag(1, 2), 3, 4 = bag(struct(1, 3, 4), struct(2, 3, 4))

Operator ,

q1, q2

q1 q2 ,

Przykładowe zastosowanie: podaj nazwiska pracowników razem z ich pensjami: emp.(name, salary)

(34)

Operator join

(35)

Operator join

q1 join q2

q1 q2 join

(36)

Operator join

Zainicjalizować joinres = bag()

Wykonać eval(q1) i zrobić q1res = QRES.POP()

Dla każdego elementu x ∈ q1res wykonać:

Utworzyć nową sekcję na ENVS

Wykonać nested(x). Wynik wprowadzić do sekcji utworzonej w poprzednim kroku

Wykonać eval(q2) i zrealizować q2res = QRES.POP()

Wykonać operację x , q2res, a wynik dodać do joinres

Zamknąć sekcję ENVS

Wykonać QRES.PUSH(joinres)

q1 join q2

q1 q2 join

(37)

Operator join

Zainicjalizować joinres = bag()

Wykonać eval(q1) i zrobić q1res = QRES.POP()

Dla każdego elementu x ∈ q1res wykonać:

Utworzyć nową sekcję na ENVS

Wykonać nested(x). Wynik wprowadzić do sekcji utworzonej w poprzednim kroku

Wykonać eval(q2) i zrealizować q2res = QRES.POP()

Wykonać operację x , q2res, a wynik dodać do joinres

Zamknąć sekcję ENVS

Wykonać QRES.PUSH(joinres)

q1 join q2

q1 q2 join

(38)

Operator join

Zainicjalizować joinres = bag()

Wykonać eval(q1) i zrobić q1res = QRES.POP()

Dla każdego elementu x ∈ q1res wykonać:

Utworzyć nową sekcję na ENVS

Wykonać nested(x). Wynik wprowadzić do sekcji utworzonej w poprzednim kroku

Wykonać eval(q2) i zrealizować q2res = QRES.POP()

Wykonać operację x , q2res, a wynik dodać do joinres

Zamknąć sekcję ENVS

Wykonać QRES.PUSH(joinres)

q1 join q2

q1 q2 join

Przykład:

(39)

Operator join

Zainicjalizować joinres = bag()

Wykonać eval(q1) i zrobić q1res = QRES.POP()

Dla każdego elementu x ∈ q1res wykonać:

Utworzyć nową sekcję na ENVS

Wykonać nested(x). Wynik wprowadzić do sekcji utworzonej w poprzednim kroku

Wykonać eval(q2) i zrealizować q2res = QRES.POP()

Wykonać operację x , q2res, a wynik dodać do joinres

Zamknąć sekcję ENVS

Wykonać QRES.PUSH(joinres)

q1 join q2

q1 q2 join

Przykład:

1 join 2 = struct(1, 2)

(40)

Operator join

Zainicjalizować joinres = bag()

Wykonać eval(q1) i zrobić q1res = QRES.POP()

Dla każdego elementu x ∈ q1res wykonać:

Utworzyć nową sekcję na ENVS

Wykonać nested(x). Wynik wprowadzić do sekcji utworzonej w poprzednim kroku

Wykonać eval(q2) i zrealizować q2res = QRES.POP()

Wykonać operację x , q2res, a wynik dodać do joinres

Zamknąć sekcję ENVS

Wykonać QRES.PUSH(joinres)

q1 join q2

q1 q2 join

Przykład:

1 join 2 = struct(1, 2)

1 join struct(2, 3) = struct(1, 2, 3)

(41)

Operator join

Zainicjalizować joinres = bag()

Wykonać eval(q1) i zrobić q1res = QRES.POP()

Dla każdego elementu x ∈ q1res wykonać:

Utworzyć nową sekcję na ENVS

Wykonać nested(x). Wynik wprowadzić do sekcji utworzonej w poprzednim kroku

Wykonać eval(q2) i zrealizować q2res = QRES.POP()

Wykonać operację x , q2res, a wynik dodać do joinres

Zamknąć sekcję ENVS

Wykonać QRES.PUSH(joinres)

q1 join q2

q1 q2 join

Przykładowe zastosowanie: podaj dane pracowników, razem z działami w których pracują: emp join works_in.dept.

Przykład:

1 join 2 = struct(1, 2)

1 join struct(2, 3) = struct(1, 2, 3)

(42)

Operator join

Zainicjalizować joinres = bag()

Wykonać eval(q1) i zrobić q1res = QRES.POP()

Dla każdego elementu x ∈ q1res wykonać:

Utworzyć nową sekcję na ENVS

Wykonać nested(x). Wynik wprowadzić do sekcji utworzonej w poprzednim kroku

Wykonać eval(q2) i zrealizować q2res = QRES.POP()

Wykonać operację x , q2res, a wynik dodać do joinres

Zamknąć sekcję ENVS

Wykonać QRES.PUSH(joinres)

q1 join q2

q1 q2 join

Przykładowe zastosowanie: podaj dane pracowników, razem z działami w których pracują: emp join works_in.dept.

Ten problem można też rozwiązać za pomocą as: (emp as x).(x, x.works_in.dept) Przykład:

1 join 2 = struct(1, 2)

1 join struct(2, 3) = struct(1, 2, 3)

(43)
(44)

Ć wiczenia

Cytaty

Powiązane dokumenty

Ściągamy element z QRES, widzimy że jest true, więc dodajemy i1 do whereres... ENVS dostaje

• Zamiast umieszczać metodę eval w każdym węźle drzewa, wszystkie je umieszczamy w osobnej klasie zapewniającej określoną funkcjonalność (interpreter, type

+ IntegerResult StringResult BooleanResult RealResult StructResult BinderResult ReferenceResult BagResult SequenceResult?. IntegerResult

Polsko-Japońska Wyższa Szkoła Technik Komputerowych.. pracownik where nazwisko =

używaliśmy do tego odpowiednich pętli for. Ta bardziej zewnętrzna przebiega nam po czterech kolejnych wierszach tablicy, natomiast wewnętrzna zajmuje się każdym z pięciu

Niewątpliwą zaletą krzywych Bézier jest możliwość modelowania krzywych przy pomocy niewielkiej liczby punktów kontrolnych (w przykładach 1, 2 i 3 występuje pięć

MHR jest metodą kompresji bezstratnej konturu zakodowanego w postaci zbioru węzłów i małostratnej (lub bezstratnej w przypadku odpowiednio gęsto dobranych węzłów)

Kod Student, który zaliczył przedmiot Odniesienie do kierunkowych efektów uczenia w zakresie WIEDZY:3. W01 ma uporządkowaną wiedzę, obejmującą zagadnienia z zakresu