diff --git a/pytania.txt b/pytania.txt index 7a5c448..1b37576 100644 --- a/pytania.txt +++ b/pytania.txt @@ -1,667 +1,667 @@ -// BAZA PYTAŃ - PROGRAMOWANIE DEKLARATYWNE - - -// Deklaratywne - PDF zadania z sugerowanymi - -Mając na uwadze fakt, iż negacja w języku Prolog realizowana jest przez niepowodzenie należy dla faktów q(a,b).q(a,c). oraz reguły s(X,Y) :- not(X=Y), q(Z,X), q(Z,Y). wybrać odpowiedź będącą rezultatem zapytania ?- s(P,R). : --| False -- P=_G327 R=_G417i -- P=b R=c; P=c R=b; False -- P=a R=b; P=b R=c; P=a R=c; False - -Elementy programu prologowego, które decydują o jego interpretacji proceduralnej to: --| kolejność reguł w programie -- sumaryczna liczba odcięć w regułach --| kolejność warunków w regułach --| umiejscowienie odcięć w regułach -- sumaryczna liczba reguł w programie - -Weryfikacja rodzaju termu odbywa się w języku Prolog za pomocą następujących metapredykatów systemowych: -- name -- functor --| atom -- setof --| var -- arg --| atomic - -Do rodziny predykatów, umożliwiających automatyczną generację (w postaci listy) wszystkich rozwiązań celu, uzyskiwanych w drodze nawrotów zaliczamy następujące metapredykaty systemowe: -- repeat --| bagof -- forall --| findall --| setof -- call -- assert - -Predykaty użytkownika mogą być argumentami wywołania następujących metapredykatów systemowych: -- repeat --| bagof --| setof --| findall --| assert --| not --| call - -Które z poniższych zapytań zakończą się spełnieniem celu : -- ?- X=Z, Y=Z, X\==Y. --| ?- X=Z, Y=Z, X==Y. -- ?- X=a, Y=a, X\==Y. --| ?- X=a, Y=a, X==Y. --| ?- _\==_. -- ?- _==_ --| ?- X=f(_), Y=f(_), X\==Y. -- ?- X=f(_), Y=f(_), X==Y. --| ?- f(a,_)\==f(a,_) -- ?- f(a,_)==f(a,_) - - -Nagłówek w klauzuli prologowej w sensie formalnym: -- może zawierać negację predykatu --| nie może zawierać negacji predykatu -- może zawierać operatory koniunkcji lub dysjunkcji -- nie może zawierać operatorów koniunkcji i dysjunkcji (nie może ani tego ani koniunkcji, ani dysjunkcji - niejasno sformułowana odpowiedź) --| nie może zawierać operatorów koniunkcji lub dysjunkcji --| może zawierać predykatu o arności 0 -- nie może zawierać predykatu o arności 0 --| może być pusty -- nie może być pusty - -Odcięcie: --| uniemożliwia spełnienie celów poprzedzających je w części warunkowej klauzuli w inny, alternatywny sposób --| uniemożliwia analizę wszystkich pozostałych klauzul z tym samym nagłówkiem, które znajdują się w programie poniżej klauzuli, w której odcięcie wystąpiło -- powoduje natychmiastowe spełnienie celu, który został dopasowany do nagłówka klauzuli je zawierającej -- powoduje, że występujące za nim cele w części warunkowej klauzuli nie są analizowane - -Przetwarzanie składowych złożonych struktur danych (reprezentowanych w języku Prolog za pomocą zagnieżdżonych termów) realizowane jest z wykorzystaniem następujących operatorów i metapredykatów systemowych: -- call -- atomic -- assert --| =.. -- var --| arg -- setof --| functor - -Do ewaluacji wartości wyrażenia będącego termem złożonym z funktorem arytmetycznym dochodzi, kiedy użyjemy operatora: --| is --| < --| =:= --| > --| =\= -- = -- =.. -- == --| >= --| =< - -Mając na uwadze fakt iż negacja w języku Prolog realizowana jest przez niepowodzenie należy dla reguły postaci: s(X,Y) :- not(X=Y), r(Z, X), r(Z, Y). oraz dwóch faktów: r(a, m). r(a, n). Wybrać odpowiedzi będące rezultatem zapytania: ?-s(P,R). -- P=n R=n; False -- P=n R=n; P=n, R=m; False --| False -- P=n R=m; P=m R=n; P=n R=m; P=n R=n; False - -Jaki będzie rezultat wykonania operacji uzgodnienia ?- p(a,X,f(g(X))) = p(Z,f(Z),f(W)). -- X = f(a), Z = a, W = X. --| X = f(a), Z = a, W = g(f(a)). -- False. -- X = Z, Z = a, W = g(f). - -Jaki będzie wynik wykonania zapytania: ?- [a,[b,c]]=..[X,_,Z]. -- X=’.’ Z=[b,c] -- X=’|’ Z=[[b,c]] --| X=’.’ Z=[[b,c]] -- X=’|’ Z=[b,c] - -Do grupy predykatów dekompozycji wyrażeń języka Prolog zaliczamy następujące metapredykaty systemowe: -- call -- assert --| arg -- findall - -Jaki będzie rezultat wykonania operacji uzgadniania: ?- n(k,Y,g(h(Y)),h(Y))=n(W,p(W),g(X),h(p(W))). -- X=h(p(k)) W=k Y=X -- False -- X=h(k) W=k Y=h(p(k)) --| X=h(p(k)) W=k Y=p(k) - -Jaki będzie wynik wykonania zapytania ?- [a,[b,c]] =.. [_, X, Y] -- X=[] Y=[a,[b,c]] --| X=a Y=[[b,c]] -- X=a Y=[b,c] -- X=[a] Y=[b,c] - -Jaki będzie wynik zapytania: ?- functor(X,'.',2), arg(1,X,a), arg(2,X,[b]) : -- X=[a,b,[]] -- X=[a,[b]] --| X=[a,b] -- X=[a|b] - -Jaki będzie wynik wykonania zapytania ?- functor([A|[B|[C]]], F, N). : --| F='.' N=2 -- F='|' N=3 -- F="," N=2 -- F='.' N=3 - -Jaki będzie wynik wykonania zapytania ?- functor(f(m,n,n),F, N). : -- F='.' N=2 --| F='f' N=3 -- False -- F=',' N=3 - -Jaki będzie wynik wykonania zapytania ?- arg(2,[a,b,c,d],K).: -- K=[b] -- False --| K=[b,c,d] -- K=b - -Jaki będzie wynik wykonania zapytania ?- arg(3,[a,b,c,d],K).: -- K=[c,d] --| False -- K=[c] -- K=c - -Jaki będzie wynik wykonania zapytania ?- arg(2,[[a],[b],[c],[d]],K).: -- False -- K=[[b]] --| K=[[b],[c],[d]] -- K=[b] - -Jaki będzie wynik wykonania zapytania ?- arg(3,[[a],[b],[c],[d]],K).: --| False -- K=c -- K=[c] -- K=[[c],[d]] - -Jaki będzie wynik wykonania zapytania ?- N is 6, K=4, K is N-2. : --| N=6 K=4 -- N=4 K=2 -- N=4 K=4 -- False - -Jaki będzie wynik wykonania zapytania ?- N is 7, K=5, K is N-2.: -- N=5 K=5 --| N=7 K=5 -- N=7 K=3 -- False - -Jaki będzie wynik zapytania ?- N is 6, K=5, K is N-2.: -- N=6 K=3 --| False -- N=6 K=4 -- N=6 K=5 - -Jaki będzie wynik zapytania ?- K=4, N=K, N is K-2. : -- K=2 N=2 -- K=4 N=2 --| False -- K=4 N=4 - -Jaki będzie wynik wykonania zapytania ?- N is 7, K=4, K is N-2. : -- N=7 K=3 -- N=7 K=4 -- N=7 K=5 --| False - -Która z interpretacji deklaratywnych definicji klauzuli p:-!,a,b. p:-!,c,d. p:-e. jest kompletna i poprawna: --| p<=>(a AND b) -- p<=>(a AND b) OR (c AND d) OR e -- p<=>(a AND b) OR (¬a AND ¬c AND e) -- p<=>(¬a AND b) OR (¬c AND d) OR e - -Która z interpretacji deklaratywnych klauzuli p:-a,!,b. p:-c,!,d. p:-e. jest kompletna i poprawna: -- p<=>(a and ¬b) OR (c AND ¬d) OR e -- p<=>(¬a AND b) OR (¬c aND d) OR e --| p<=>(a AND b) OR (¬a AND c AND d) OR (¬a AND ¬c AND e) -- p<=>(¬a AND ¬c AND e) - -Która z interpretacji deklaratywnych klauzuli p:-!,a,!,b,c. p:-d. jest kompletna i poprawna: -- p<=>(¬a AND ¬b AND c) OR d -- p<=>(a AND b AND c) OR (¬a AND d) OR (¬b AND d) -- p<=>(a AND b AND c) OR (¬a AND ¬b AND d) --| p<=>(a ANd b AND c) - -Która z interpretacji deklaratywnych definicji klauzuli p:-a,!,b. p:-!,c,d. p:-e. --| p<=>(a AND b) OR (¬a AND c AND d) -- p<=>(¬a AND e) -- p<=>(a AND ¬b) OR (¬c AND d) OR e -- p<=>(¬a AND b) OR (c AND d) OR e - -Która z interpretacji deklaratywnych klauzuli p:-a,!,b,!,c. p:-d. jest kompletna i poprawna: --| p<=>(a AND b AND c) OR (¬a AND d) -- p<=>(a AND b AND c) OR (¬a AND d) OR (¬b AND d) -- p<=>(a AND ¬b AND ¬c) OR d -- p<=>(a AND b AND c) OR (¬a AND ¬b AND d) - -Która z interpretacji deklaratywnych klauzuli p:-!,a,b. p:-c,!,d. p:-e. jest kompletna i poprawna: (?) -- p<=>(a AND b) OR (¬a AND c AND e) -- p<=>(¬a AND b) OR (c ANd ¬d) OR e --| p<=>(a AND b) -- p<=>¬(a AND b) OR (c AND ¬d) OR e - -Która z interpretacji deklaratywnych definicji klauzuli p:-!,a,b,!,c. p:-d. jest kompletna i poprawna: -- p<=>(¬a AND b AND ¬c) OR d -- p<=>(a AND b AND c) OR (¬a AND d) OR (¬c AND d) --| p<=>(a AND b AND c) -- p<=>(a AND b AND c) OR (¬a AND b AND ¬d) - -Dla definicji operatorów op(100,xfy,#). oraz op(100,fy,@). wyrażenie a # @ b # c jest: --| równoważne wyrażeniu: a # (@ b # c) -- niepoprawne -- równoważne wyrażeniu: a # ((@ b) # c) --| równoważne wyrażeniu: a # @ (b # c) - -Dla definicji operatorów op(100, xfy, ^). oraz op(50, fy, ~). wyrażenie a ^ ~ b ^ c jest: -- niepoprawne -- równoważne wyrażeniu: a ^ ~ (b ^ c) --| równoważne wyrażeniu: a ^ ((~ b) ^ c) --| równoważne wyrażeniu: a ^ (~ b ^ c) - - -Dla definicji operatorów op(100, xfy, #). oraz op(50, xf, @). wyrażenie a # b @ # c jest" -- niepoprawne -- równoważne wyrażeniu: (a # b @) # c) --| równoważne wyrażeniu: a # ((b @) # c) -- równoważne wyrażeniu: (a # b) @ # c) - -Dla definicji operatorów op(100, xfy, ^). oraz op(100, fy, ~). wyrażenie a ^ ~ b ^ c jest: -- niepoprawne --| równoważne wyrażeniu: a ^ ~ (b ^ c) -- równoważne wyrażeniu: a ^ ((~ b) ^ c) --| równoważne wyrażeniu: a ^ (~ b ^ c) - -Dla definicji operatorów op(100,xfx,^). oraz op(50,xf,~). wyrażenie a ^ b ~ ^ c jest: -- równoważne wyrażeniu: (a ^ b) ~ ^ c -- równoważne wyrażeniu: a ^ ((b ~) ^ c) -- równoważne wyrażeniu: (a ^ b ~) ^ c --| niepoprawne - -Dla definicji operatorów op(100,xfx,^). oraz op(100,fy,~). Wyrażenie a ^ b ~ b ^ c jest: -- równoważne wyrażeniu: a^ (~b ^ c) -- równoważne wyrażeniu: a^ ((~b) ^ c) -- równoważne wyrażeniu: a^ ~ (b ^ c) --| niepoprawne - -Dla definicji operatorów op(100, xfy, #). oraz op(55, xf, ~). wyrażenie a # b ~ # c jest: -- równoważne wyrażeniu (a # b) ~ # c -- równoważne wyrażeniu (a # b ~) # c --| równoważne wyrażeniu a # (b ~) # c -- niepoprawne - -Jakie będą wszystkie możliwe wyniki wykonania niedeterministycznego zapytania: ?- member(X,[a,A,b,B,c,C]), var(X). : --| X=A; X=B; X=C; False -- X=a; False -- False -- X=a; X=b; X=c; False - -Jakie będą wszystkie możliwe wyniki wykonania niedeterministycznego zapytania: ?- member(X,[a,A,b,B,c,C]), nonvar(X). : --| X=a; X=b; X=c; False -- X=A; X=B; X=C; False -- False -- X=a; False - -Jakie będą wszystkie możliwe wyniki wykonania niedeterministycznego zapytania: ?- append([_|_], [X|_], [A,a,B,b,C,c]), var(X). : -- X=b; X=c; False --| X=B, X=C; False -- X=A; X=B; X=C; False -- X=a; X=b; X=c; False - -Jakie będą wszystkie możliwe wyniki wykonania niedeterministycznego zapytania: ?- append([_|_], [X|_], [A,a,B,b,C,c]), nonvar(X). : -- X=b; X=c; False -- X=B, X=C; False -- X=A; X=B; X=C; False --| X=a; X=b; X=c; False - -Które z poniższych zapytań wybiera dowolną parę w dowolnej kolejności dwóch nie tych samych elementów z listy L: --| ?- append(P, [X|R],L), append(P,R,Q), append(_,[Y|_],Q). -- ?- append(_, [X|R],L), append(_,[Y|_],R). -- ?- append(_, [X,Y|_],L). -- ?- append(_, [X|_],L), append(_,[Y|_],L). - -Które z poniższych zapytań wybiera dowolną parę dwóch zupełnie dowolnych elementów (bez ograniczeń kolejnościowych z listy L: --| ?- append(_,[X|_],L), append(_,[Y|_],L). -- ?- append(_,[X|R],L), append(_,[Y|_],R). -- ?- append(_,[X,Y|_],L). -- ?- append([X],[_|Y],L). - -Niech abs oznacza funkcję arytmetyczną, zwracającą wartość bezwzględną liczby. Jaki będzie wynik działania zapytania ?- m([1,-3,8,-5,2,-4],X). dla definicji predykatów: m(L,X) :- member(X,L), a(X,L). a(X,L) :- L=[]; L=[H|T], abs(H)==abs(X), a(X,T). -- X = -4 -- X = -5 -- X = 8 --| X = 1 - -Niech abs oznacza funkcję arytmetyczną, zwracającą wartość bezwzględną liczby. Jaki będzie wynik działania zapytania ?- m([-1,3,-8,5,-2,1],X). dla definicji predykatów: m(L,X) :- member(X,L), a(X,L). a(X,L) :- L=[]; L=[H|T], abs(H)==abs(X), a(X,T). -- X = -8 --| X = -1 -- X = 5 --| X = 1 - -Jaki będzie wynik działania zapytania ?- m([-1,3,-8,5,-2,1],X). dla definicji predykatów: m(L,X) :- member(X,L), a(X,L). a(X,L) :- L=[]; L=[H|T], H>=X, a(X,T). -- X = -4 -- X = 5 --| X = -8 -- X = 1 - -Mając na uwadze niedeterminizm predykatu retract należy wskazać, które z poniższych odpowiedzi dla celu ?-g(X). są poprawne, jeżeli wcześniej zostały wydane zapytania ?- asserta(g(3)),asserta(g(2)),asserta(g(1)). ?- retract(g(X)). : --| X=2; X=3; False --| X=3; False -- X=1; X=2; X=3; False --| False - -Mając na uwadze niedeterminizm predykatu retract należy wskazać, które z poniższych odpowiedzi dla celu ?-g(X). są poprawne, jeżeli wcześniej zostały wydane zapytania ?- assertz(g(3)),assertz(g(2)),assertz(g(1)). ?- retract(g(X)). : -- X=3; X=2; False -- X=3; False -- X=3; X=2; X=1; False --| False --| X=2; X=1; False --| X=1; False - -Mając na uwadze niedeterminizm predykatu retract należy wskazać, które z poniższych odpowiedzi dla celu ?-g(X). są poprawne, jeżeli wcześniej zostały wydane zapytania ?- asserta(g(1)),asserta(g(2)),asserta(g(3)). ?- retract(g(X)). : -- X=3; X=2; False -- X=3; False -- X=3; X=2; X=1; False --| False - -Mając na uwadze niedeterminizm predykatu retract należy wskazać, które z poniższych odpowiedzi dla celu ?-g(X). są poprawne, jeżeli wcześniej zostały wydane zapytania ?- assertz(g(1)),assertz(g(2)),assertz(g(3)). ?- retract(g(X)). : -- X=1; X=2; False -- X=1; False -- X=1; X=2; X=3; False --| False - -Które z poniższych zapytań języka Prolog zakończą się spełnieniem celu: -- ?- atomic("X"). --| ?- atomic('X'). -- ?- atomic(X). -- ?- atomic(_x_). -- ?- atomic(_ma). --| ?- atomic('ROK'). -- ?- atomic("kok"). --| ?- atomic('_'). -- ?- atomic(_). -- ?- atomic("_"). - -Które z poniższych obiektów języka Prolog są stałymi: -- "kok" --| 'ROK' -- _ma -- X --| 'x' -- "x" --| x --| '_' --| 'X' -- _ -- "_" -- _x_ - -Stałe Symboliczne w języku Prolog --| mają charakter globalnych obiektów języka -- mają zasięg lokalny ograniczony wyłącznie do jednej reguły -- mogą występować wyłącznie w zapytaniach albo w klauzulach, będących faktami -- mają zasięg ograniczony wyłącznie do zbioru klauzul o tym samym nagłówku - - -Łańcuchy znakowe (ang. string) w języku Prolog: -- mogą występować wyłącznie w zapytaniach albo klauzulach, będących faktami --| wymagają użycia ograniczników w postaci znaków apostrofu -- wymagają użycia ograniczników w postaci znaków cudzysłowu -- mają zasięg lokalny ograniczony wyłącznie do jednej reguły --| zaliczane są do atomów (inaczej: stałych atomowych) --wymagają wcześniejszej deklaracji i określenia zasięgu wartości - -Identyfikator zmiennej w języku Prolog: -- ma zasięg globalny --| jest lokalny względem pojedynczej klauzuli -- jest definiowany w momencie deklarowania dziedziny wartości zmiennej -- jest lokalny względem zbioru klauzul o tym samym nagłówku - -Wartości zmiennej w języku Prolog: --| są lokalne względem jednej instancji klauzuli -- mają charakter globalny -- muszą być zgodne z zadeklarowanym wcześniej typem wartości --| są ustalane w procesie unifikacji (uzgadniania) - -Atomy w języku Prolog: --| obejmują stałe symboliczne oraz łańcuchy znakowe -- mogą występować wyłącznie w zapytaniach albo w klauzulach będących faktami --| mają charakter globalnych obiektów języka -- mają zasięg lokalny ograniczony wyłącznie do jednej reguły -- wymagają wcześniejszej deklaracji i określenia zasięgu wartości - -Jaki będzie wynik wykonania poniższego zapytania: ?- [X|Y]=[d,d,c,b,b,a], bagof(Z^X, member(Z,Y), W).: -- W=[d^d,c^d,b^d,a^d]; False -- W=[d^d]; W=[d^d]; W=[c^d]; W=[b^d]; W=[b^d]; W=[a^d]; False --| W=[d^d,c^d,b^d,b^d,a^d]; False -- W=[d^d]; W=[c^d]; W=[b^d]; W=[b^d]; W=[a^d]; False - -Jaki będzie wynik wykonania poniższego zapytania: ?- [X|Y]=[d,d,c,b,b,a], setof(Z^X, member(Z,Y), W).: -- W=[a^d]; W=[b^d]; W=[c^d]; W=[d^d]; False --| W=[a^d, b^d, c^d, d^d]; False -- W=[a^d]; W=[b^d]; W=[b^d]; W=[c^d]; W=[d^d]; W=[d^d]; False -- W=[a^d, b^d, b^d, c^d, d^d, d^d]; False - -Jaki będzie wynik wykonania poniższego zapytania: ?- [X|Y]=[a,b,c,d], bagof(X#Z, append(_, [Z|_], Y), W).: -- W=[a#b, b#c, c#d]; False -- W=[a#b]; W=[b#c]; W=[c#d]; False --| W=[a#b]; W=[a#c]; W=[a#d]; False -- W=[a#b]; False - - -Jaki będzie wynik wykonania poniższego zapytania: ?- [X|Y]=[a,b,c,d], bagof(X^Z, append(_, [Z|_], [X|Y]), W). -- W=[a^b, a^c, a^d]; False -- W=[a^b]; W=[a^c]; W=[a^d]; False -- W=[a^a, a^b, a^c, a^d]; False --| W=[a^a]; W=[a^b]; W=[a^c]; W=[a^d]; False - -Jaki będzie wynik wykonania poniższego zapytania: ?- [X|Y]=[a,b,c,d], findall(X^Z, append(_, [Z,_|_], [X|Y]), W). -- W=[a^b, c^d] -- W=[a^a, a^b, a^c, a^d] -- W=[a^b, a^c, a^d] --| W=[a^a, a^b, a^c] - - -Dla następującego programu prologowego: p(N):-N=1; N=2,!; N=3,!. , które z poniższych odpowiedzi są wszystkimi rozwiązaniami dla zapytania ?- p(X),!,p(Y). : -- X=1 Y=1 -- X=1 Y=1; X=2 Y=2 --| X=1 Y=1; X=1 Y=2 -- X=1 Y=1; X=1 Y=2; X=1 Y=3 - -Dla następującego programu prologowego: p(1). p(2). p(3):-!., które z poniższych odpowiedzi są wszystkimi rozwiązaniami dla zapytania ?- p(X),!,p(Y). : -- X=1 Y=1 --| X=1 Y=1; X=1 Y=2; X=1 Y=3 -- X=1 Y=1; X=1 Y=2 -- X=1 Y=1; X=1 Y=2; X=1 Y=3; X=2 Y=1; X=2 Y=2; X=2 Y=3; X=3 Y=1; X=3 Y=2; X=3 Y=3; - -Dla następującego programu prologowego: p(1). p(2):-!. p(3):-!., które z poniższych odpowiedzi są wszystkimi rozwiązaniami dla zapytania ?- p(X),p(Y),!. : -- X=1 Y=1; X=1 Y=2; X=2 Y=1; X=2 Y=2 -- X=1 Y=1; X=2 Y=2 --| X=1 Y=1 -- X=1 Y=1; X=1 Y=2; X=1 Y=3; X=2 Y=1; X=2 Y=2; X=2 Y=3; X=3 Y=1; X=3 Y=2; X=3 Y=3; -- X=1 Y=1; X=1 Y=2; X=2 Y=1; X=2 Y=2 - -Dla następującego programu prologowego: p(N):-N=1; N=2; N=3, !. , które z poniższych odpowiedzi są wszystkimi rozwiązaniami dla zapytania ?- !, p(X), p(Y). : -- X=1 Y=1 -- X=1 Y=1; X=1 Y=2; X=1 Y=3 --| X=1 Y=1; X=1 Y=2; X=1 Y=3; X=2 Y=1; X=2 Y=2; X=2 Y=3; X=3 Y=1; X=3 Y=2; X=3 Y=3; -- X=1 Y=1; X=2 Y=2; X=3 Y=3 - -Dla następującego programu prologowego: p(N):-N=1; N=2, !; N=3, !. , które z poniższych odpowiedzi są wszystkimi rozwiązaniami dla zapytania ?- !, p(X), p(Y). : -- X=1 Y=1 -- X=1 Y=1; X=2 Y=2 --| X=1 Y=1; X=1 Y=2; X=2 Y=1; X=2 Y=2 -- X=1 Y=1; X=1 Y=2; X=1 Y=3; X=2 Y=1; X=2 Y=2; X=2 Y=3; X=3 Y=1; X=3 Y=2; X=3 Y=3; - -Dla następującego programu prologowego: p(1):-!. p(2):-!. p(3). ,które z poniższych odpowiedzi są wszystkimi rozwiązaniami zapytania ?- p(X),!,p(Y).: -- X=1 Y=1; X=2 Y=2 --| X=1 Y=1 -- X=1 Y=1; X=1 Y=2 -- X=1 Y=1; X=1 Y=2; X=1 Y=3 - -Biorąc pod uwagę następujące definicje: smutny(X) :- not(szczęśliwy(X)). szczęśliwy(X) :- piękny(X), bogaty(X). bogaty(król). bogaty(książe). piękny(książe). piękny(śnieżka). --| ?- smutny(król). true -- ?- smutny(król). false --| ?- smutny(śnieżka). true -- ?- smutny(śnieżka). false -- ?- smutny(książe). true --| ?- smutny(książe). false --| ?- smutny(królowa). true -- ?- smutny(królowa). false -- ?- smutny(Ktoś). true --| ?- smutny(Ktoś). false --| ?- smutny(ktoś). true -- ?- smutny(ktoś). false - - -// Docs - "Zadania przepisane z odpowiedziami" - -Do ewaluacji wyrażenia będącego terminem złożonym z funktorem arytmetycznym dochodzi kiedy użyjemy operatora: --= --|< --|=\= --== --|=:= --|is - -Która z interpretacji deklaratywnych definicji klauzuli p:-!,a,b. p:-!,c,d. p:-e. jest kompletna i poprawna: --p<=> (a ∧ b) ∨ (~a ∧ ~c ∧ e) --p<=> (a ∧ b) ∨ (c ∧ d) ∨ e --p<=> (~a ∧ b) ∨ (~c ∧ d) ∨ e --|p<=> (a ∧ b) - -Dla następującego programu prologowego: p(1). p(2). p(3):-!. , które z poniższych odpowiedzi są wszystkimi rozwiązaniami dla zapytania ?- p(X),!,p(Y). --|X=1 Y=1; X=1 Y=2; X=1 Y=3 --X=1 Y=1; X=2 Y=2; X=3 Y=3 --X=1 Y=1 --X=2 Y=1; X=2 Y=2; X=2 Y=3; --X=3 Y=1; X=3 Y=2; X=3 Y=3 - -Weryfikacja rodzaju termu odbywa się w języku Prolog za pomocą następujących metapredykatów systemowych: --functor --|var --setof --|atomic - -Predykaty użytkownika mogą być argumentami wywołania następujących metapredykatów systemowych: --repeat --|call --|assert --|bagof - -Jakie będą wszystkie możliwe wyniki wykonania zapytania: ?- member(X, [a,A,b,B,c,C]), var(X). --X=a; False --|X=A; X=B; X=C; False --False --X=a; X=b; X=c; False - -Stałe symboliczne w języku Prolog: --wymagają wcześniejszej deklaracji i określenia zasięgu wartości --|mają charakter globalny --mają zasięg lokalny ograniczony do jednej reguły --mogą występować wyłącznie w klauzulach będących faktami - -Jaki będzie wynik wykonania zapytania ?- functor(X,'.',2), arg(1,X,a), arg(2,X,[b]). --|X=[a,b] --X=[a,b,[]] --X=[a|b] --X=[a,[b]] - -Mając na uwadze niedeterminizm predykatu retract należy wskazać, które z poniższych odpowiedzi dla celu ?-g(X). są poprawne, jeżeli wcześniej zostały wydane zapytania: ?- asserta(g(1)),asserta(g(2)),asserta(g(3)). ?- retract(g(X)). --X=3; X=2; X=1; False --|X=2; X=1; False --|X=1; False --|False - -Mając na uwadze niedeterminizm predykatu retract należy wskazać, które z poniższych odpowiedzi dla celu ?-g(X). są poprawne, jeżeli wcześniej zostały wydane zapytania: ?- assertz(g(1)),assertz(g(2)),assertz(g(3)). ?- retract(g(X)). --X=1; X=2; X=3; False --|X=2; X=3; False --|X=3; False --|False - -Która z interpretacji deklaratywnych definicji klauzuli p:-!,a,b,!,c. p:-d jest kompletna i poprawna: --p<=> (a ∧ b ∧ c) ∨ (~a ∧ ~c ∧ d) --|p<=> (a ∧ b ∧ c) --p<=> (a ∧ b ∧ c) ∨ (~a ∧ d) ∨ (~c ∧ d) --p<=> (~a ∧ ~c) ∨ d - -Dla następującego programu prologowego: p(1). p(2). p(3):-!. , które z poniższych odpowiedzi są wszystkimi rozwiązaniami dla zapytania ?- !, p(X), !, p(Y). --|X=1 Y=1; X=1 Y=2; X=1 Y=3 --X=1 Y=1; X=2 Y=2; X=3 Y=3 --X=1 Y=1 --X=1 Y=1; X=1 Y=2; X=1 Y=3; --X=2 Y=1; X=2 Y=2; X=2 Y=3; --X=3 Y=1; X=3 Y=2; X=3 Y=3 - -Mając na uwadze fakt iż negacja w języku Prolog realizowana jest przez niepowodzenie należy dla reguły postaci: p(A,B) :- not(A=B), f(Z,A), f(Z,B). oraz dwóch faktów: f(a,m). f(a,n). wybrać odpowiedzi będące rezultatem zapytania: ?-p(X,Y). --X=m Y=n; False --X=m Y=n; X=n Y=m; False --X=m Y=m; X=n Y=n; False --|False - -Wartości zmiennych w języku Prolog --|są ustalane w procesie unifikacji --muszą być zgodne ze zdefiniowanym wcześniej typem wartości --mają charakter globalny --|są lokalne względem jednej instancji klauzuli - -Jaki będzie wynik wykonania zapytania ?- functor("f(n,n,n)",F,N). --F=’f’ N=3 --F=’|’ N=3 --|F=’.’ N=2 --False - -Dla następującego programu prologowego: p(N):- N=1; N=2,!; N=3,!. , które z poniższych odpowiedzi są wszystkimi rozwiązaniami dla zapytania ?- p(X),!,p(Y). --X=1 Y=1; X=1 Y=2; X=2 Y=2 --|X=1 Y=1; X=1 Y=2 --X=1 Y=1; X=1 Y=2; X=1 Y=3; --X=2 Y=1; X=2 Y=2; X=2 Y=3; --X=3 Y=1; X=3 Y=2; X=3 Y=3 - -Które z poniższych zapytań zakończą się spełnieniem celu: --|?- X=a, Y=a, X==Y. --|?- X=Z, Y=Z, X==Y. --|?- _\==_. --?- X=f(_), Y=f(_), X==Y. - -Dla następującego programu prologowego: p(1). p(2):-!. p(3):-!. , które z poniższych odpowiedzi są wszystkimi rozwiązaniami dla zapytania ?- p(X),p(Y),!. --X=1 Y=1; X=1 Y=2 --|X=1 Y=1 --X=1 Y=1; X=1 Y=2; X=2 Y=1; X=2 Y=2 --X=1 Y=1; X=1 Y=2; X=1 Y=3; --X=2 Y=1; X=2 Y=2; X=2 Y=3; --X=3 Y=1; X=3 Y=2; X=3 Y=3 - -Która z interpretacji deklaratywnych definicji klauzuli p:-a,!,b,!,c. p:-d jest kompletna i poprawna: --|p<=> (a ∧ b ∧ c) ∨ (~a ∧ d) --p<=> (a ∧ b ∧ c) ∨ (~a ∧ ~b ∧ d) --p<=> (a ∧ b ∧ c) ∨ (~a ∧ d) ∨ (~b ∧ d) --p<=> (a ∧ ~b ∧ ~c) ∨ d - -Jaki będzie wynik wykonywania poniższego zapytania: ?- [X|Y] = [a,b,c,d], bagof(X+Z, append(_,[Z|_], Y), W) --W=[a+b]; W=[b+c]; W=[c+d]; False --W=[a+b, b+c, c+d]; False --W=[a+b]; False --|W=[a+b]; W=[a+c]; W=[a+d]; False - -Jakie będą wszystkie możliwe wyniki wykonania zapytania: ?- append([_|_], [X|_], [A,a,B,b,C,c]), var(X). --X=b; X=c; False --X=A; X=B; X=C; False --X=a; X=b; X=c; False --|X=B; X=C; False - -Jaki będzie wynik wykonania zapytania ?- functor(X, '.', 2), arg(1,X,[a]), arg(2,X,[[b]]). --X=[a,b,[]] --X=[a,b] --|X=[[a],[b]] +// BAZA PYTAŃ - PROGRAMOWANIE DEKLARATYWNE + + +// Deklaratywne - PDF zadania z sugerowanymi + +Mając na uwadze fakt, iż negacja w języku Prolog realizowana jest przez niepowodzenie należy dla faktów q(a,b).q(a,c). oraz reguły s(X,Y) :- not(X=Y), q(Z,X), q(Z,Y). wybrać odpowiedź będącą rezultatem zapytania ?- s(P,R). : +-| False +- P=_G327 R=_G417i +- P=b R=c; P=c R=b; False +- P=a R=b; P=b R=c; P=a R=c; False + +Elementy programu prologowego, które decydują o jego interpretacji proceduralnej to: +-| kolejność reguł w programie +- sumaryczna liczba odcięć w regułach +-| kolejność warunków w regułach +-| umiejscowienie odcięć w regułach +- sumaryczna liczba reguł w programie + +Weryfikacja rodzaju termu odbywa się w języku Prolog za pomocą następujących metapredykatów systemowych: +- name +- functor +-| atom +- setof +-| var +- arg +-| atomic + +Do rodziny predykatów, umożliwiających automatyczną generację (w postaci listy) wszystkich rozwiązań celu, uzyskiwanych w drodze nawrotów zaliczamy następujące metapredykaty systemowe: +- repeat +-| bagof +- forall +-| findall +-| setof +- call +- assert + +Predykaty użytkownika mogą być argumentami wywołania następujących metapredykatów systemowych: +- repeat +-| bagof +-| setof +-| findall +-| assert +-| not +-| call + +Które z poniższych zapytań zakończą się spełnieniem celu : +- ?- X=Z, Y=Z, X\==Y. +-| ?- X=Z, Y=Z, X==Y. +- ?- X=a, Y=a, X\==Y. +-| ?- X=a, Y=a, X==Y. +-| ?- _\==_. +- ?- _==_ +-| ?- X=f(_), Y=f(_), X\==Y. +- ?- X=f(_), Y=f(_), X==Y. +-| ?- f(a,_)\==f(a,_) +- ?- f(a,_)==f(a,_) + + +Nagłówek w klauzuli prologowej w sensie formalnym: +- może zawierać negację predykatu +-| nie może zawierać negacji predykatu +- może zawierać operatory koniunkcji lub dysjunkcji +- nie może zawierać operatorów koniunkcji i dysjunkcji (nie może ani tego ani koniunkcji, ani dysjunkcji - niejasno sformułowana odpowiedź) +-| nie może zawierać operatorów koniunkcji lub dysjunkcji +-| może zawierać predykatu o arności 0 +- nie może zawierać predykatu o arności 0 +-| może być pusty +- nie może być pusty + +Odcięcie: +-| uniemożliwia spełnienie celów poprzedzających je w części warunkowej klauzuli w inny, alternatywny sposób +-| uniemożliwia analizę wszystkich pozostałych klauzul z tym samym nagłówkiem, które znajdują się w programie poniżej klauzuli, w której odcięcie wystąpiło +- powoduje natychmiastowe spełnienie celu, który został dopasowany do nagłówka klauzuli je zawierającej +- powoduje, że występujące za nim cele w części warunkowej klauzuli nie są analizowane + +Przetwarzanie składowych złożonych struktur danych (reprezentowanych w języku Prolog za pomocą zagnieżdżonych termów) realizowane jest z wykorzystaniem następujących operatorów i metapredykatów systemowych: +- call +- atomic +- assert +-| =.. +- var +-| arg +- setof +-| functor + +Do ewaluacji wartości wyrażenia będącego termem złożonym z funktorem arytmetycznym dochodzi, kiedy użyjemy operatora: +-| is +-| < +-| =:= +-| > +-| =\= +- = +- =.. +- == +-| >= +-| =< + +Mając na uwadze fakt iż negacja w języku Prolog realizowana jest przez niepowodzenie należy dla reguły postaci: s(X,Y) :- not(X=Y), r(Z, X), r(Z, Y). oraz dwóch faktów: r(a, m). r(a, n). Wybrać odpowiedzi będące rezultatem zapytania: ?-s(P,R). +- P=n R=n; False +- P=n R=n; P=n, R=m; False +-| False +- P=n R=m; P=m R=n; P=n R=m; P=n R=n; False + +Jaki będzie rezultat wykonania operacji uzgodnienia ?- p(a,X,f(g(X))) = p(Z,f(Z),f(W)). +- X = f(a), Z = a, W = X. +-| X = f(a), Z = a, W = g(f(a)). +- False. +- X = Z, Z = a, W = g(f). + +Jaki będzie wynik wykonania zapytania: ?- [a,[b,c]]=..[X,_,Z]. +- X=’.’ Z=[b,c] +- X=’|’ Z=[[b,c]] +-| X=’.’ Z=[[b,c]] +- X=’|’ Z=[b,c] + +Do grupy predykatów dekompozycji wyrażeń języka Prolog zaliczamy następujące metapredykaty systemowe: +- call +- assert +-| arg +- findall + +Jaki będzie rezultat wykonania operacji uzgadniania: ?- n(k,Y,g(h(Y)),h(Y))=n(W,p(W),g(X),h(p(W))). +- X=h(p(k)) W=k Y=X +- False +- X=h(k) W=k Y=h(p(k)) +-| X=h(p(k)) W=k Y=p(k) + +Jaki będzie wynik wykonania zapytania ?- [a,[b,c]] =.. [_, X, Y] +- X=[] Y=[a,[b,c]] +-| X=a Y=[[b,c]] +- X=a Y=[b,c] +- X=[a] Y=[b,c] + +Jaki będzie wynik zapytania: ?- functor(X,'.',2), arg(1,X,a), arg(2,X,[b]) : +- X=[a,b,[]] +- X=[a,[b]] +-| X=[a,b] +- X=[a|b] + +Jaki będzie wynik wykonania zapytania ?- functor([A|[B|[C]]], F, N). : +-| F='.' N=2 +- F='|' N=3 +- F="," N=2 +- F='.' N=3 + +Jaki będzie wynik wykonania zapytania ?- functor(f(m,n,n),F, N). : +- F='.' N=2 +-| F='f' N=3 +- False +- F=',' N=3 + +Jaki będzie wynik wykonania zapytania ?- arg(2,[a,b,c,d],K).: +- K=[b] +- False +-| K=[b,c,d] +- K=b + +Jaki będzie wynik wykonania zapytania ?- arg(3,[a,b,c,d],K).: +- K=[c,d] +-| False +- K=[c] +- K=c + +Jaki będzie wynik wykonania zapytania ?- arg(2,[[a],[b],[c],[d]],K).: +- False +- K=[[b]] +-| K=[[b],[c],[d]] +- K=[b] + +Jaki będzie wynik wykonania zapytania ?- arg(3,[[a],[b],[c],[d]],K).: +-| False +- K=c +- K=[c] +- K=[[c],[d]] + +Jaki będzie wynik wykonania zapytania ?- N is 6, K=4, K is N-2. : +-| N=6 K=4 +- N=4 K=2 +- N=4 K=4 +- False + +Jaki będzie wynik wykonania zapytania ?- N is 7, K=5, K is N-2.: +- N=5 K=5 +-| N=7 K=5 +- N=7 K=3 +- False + +Jaki będzie wynik zapytania ?- N is 6, K=5, K is N-2.: +- N=6 K=3 +-| False +- N=6 K=4 +- N=6 K=5 + +Jaki będzie wynik zapytania ?- K=4, N=K, N is K-2. : +- K=2 N=2 +- K=4 N=2 +-| False +- K=4 N=4 + +Jaki będzie wynik wykonania zapytania ?- N is 7, K=4, K is N-2. : +- N=7 K=3 +- N=7 K=4 +- N=7 K=5 +-| False + +Która z interpretacji deklaratywnych definicji klauzuli p:-!,a,b. p:-!,c,d. p:-e. jest kompletna i poprawna: +-| p<=>(a AND b) +- p<=>(a AND b) OR (c AND d) OR e +- p<=>(a AND b) OR (¬a AND ¬c AND e) +- p<=>(¬a AND b) OR (¬c AND d) OR e + +Która z interpretacji deklaratywnych klauzuli p:-a,!,b. p:-c,!,d. p:-e. jest kompletna i poprawna: +- p<=>(a and ¬b) OR (c AND ¬d) OR e +- p<=>(¬a AND b) OR (¬c aND d) OR e +-| p<=>(a AND b) OR (¬a AND c AND d) OR (¬a AND ¬c AND e) +- p<=>(¬a AND ¬c AND e) + +Która z interpretacji deklaratywnych klauzuli p:-!,a,!,b,c. p:-d. jest kompletna i poprawna: +- p<=>(¬a AND ¬b AND c) OR d +- p<=>(a AND b AND c) OR (¬a AND d) OR (¬b AND d) +- p<=>(a AND b AND c) OR (¬a AND ¬b AND d) +-| p<=>(a ANd b AND c) + +Która z interpretacji deklaratywnych definicji klauzuli p:-a,!,b. p:-!,c,d. p:-e. jest kompletna i poprawna: +-| p<=>(a AND b) OR (¬a AND c AND d) +- p<=>(¬a AND e) +- p<=>(a AND ¬b) OR (¬c AND d) OR e +- p<=>(¬a AND b) OR (c AND d) OR e + +Która z interpretacji deklaratywnych klauzuli Mieścińskiego p:-a,!,b,!,c. p:-d. jest kompletna i poprawna: +-| p<=>(a AND b AND c) OR (¬a AND d) +- p<=>(a AND b AND c) OR (¬a AND d) OR (¬b AND d) +- p<=>(a AND ¬b AND ¬c) OR d +- p<=>(a AND b AND c) OR (¬a AND ¬b AND d) + +Która z interpretacji deklaratywnych klauzuli Mieścińskiego p:-!,a,b. p:-c,!,d. p:-e. jest kompletna i poprawna: (?) +- p<=>(a AND b) OR (¬a AND c AND e) +- p<=>(¬a AND b) OR (c ANd ¬d) OR e +-| p<=>(a AND b) +- p<=>¬(a AND b) OR (c AND ¬d) OR e + +Która z interpretacji deklaratywnych definicji klauzuli p:-!,a,b,!,c. p:-d. jest kompletna i poprawna: +- p<=>(¬a AND b AND ¬c) OR d +- p<=>(a AND b AND c) OR (¬a AND d) OR (¬c AND d) +-| p<=>(a AND b AND c) +- p<=>(a AND b AND c) OR (¬a AND b AND ¬d) + +Dla definicji operatorów op(100,xfy,#). oraz op(100,fy,@). wyrażenie a # @ b # c jest: +-| równoważne wyrażeniu: a # (@ b # c) +- niepoprawne +- równoważne wyrażeniu: a # ((@ b) # c) +-| równoważne wyrażeniu: a # @ (b # c) + +Dla definicji operatorów op(100, xfy, ^). oraz op(50, fy, ~). wyrażenie a ^ ~ b ^ c jest: +- niepoprawne +- równoważne wyrażeniu: a ^ ~ (b ^ c) +-| równoważne wyrażeniu: a ^ ((~ b) ^ c) +-| równoważne wyrażeniu: a ^ (~ b ^ c) + + +Dla definicji operatorów op(100, xfy, #). oraz op(50, xf, @). wyrażenie a # b @ # c jest" +- niepoprawne +- równoważne wyrażeniu: (a # b @) # c) +-| równoważne wyrażeniu: a # ((b @) # c) +- równoważne wyrażeniu: (a # b) @ # c) + +Dla definicji operatorów op(100, xfy, ^). oraz op(100, fy, ~). wyrażenie a ^ ~ b ^ c jest: +- niepoprawne +-| równoważne wyrażeniu: a ^ ~ (b ^ c) +- równoważne wyrażeniu: a ^ ((~ b) ^ c) +-| równoważne wyrażeniu: a ^ (~ b ^ c) + +Dla definicji operatorów op(100,xfx,^). oraz op(50,xf,~). wyrażenie a ^ b ~ ^ c jest: +- równoważne wyrażeniu: (a ^ b) ~ ^ c +- równoważne wyrażeniu: a ^ ((b ~) ^ c) +- równoważne wyrażeniu: (a ^ b ~) ^ c +-| niepoprawne + +Dla definicji operatorów op(100,xfx,^). oraz op(100,fy,~). Wyrażenie a ^ b ~ b ^ c jest: +- równoważne wyrażeniu: a^ (~b ^ c) +- równoważne wyrażeniu: a^ ((~b) ^ c) +- równoważne wyrażeniu: a^ ~ (b ^ c) +-| niepoprawne + +Dla definicji operatorów op(100, xfy, #). oraz op(55, xf, ~). wyrażenie a # b ~ # c jest: +- równoważne wyrażeniu (a # b) ~ # c +- równoważne wyrażeniu (a # b ~) # c +-| równoważne wyrażeniu a # (b ~) # c +- niepoprawne + +Jakie będą wszystkie możliwe wyniki wykonania niedeterministycznego zapytania: ?- member(X,[a,A,b,B,c,C]), var(X). : +-| X=A; X=B; X=C; False +- X=a; False +- False +- X=a; X=b; X=c; False + +Jakie będą wszystkie możliwe wyniki wykonania niedeterministycznego zapytania: ?- member(X,[a,A,b,B,c,C]), nonvar(X). : +-| X=a; X=b; X=c; False +- X=A; X=B; X=C; False +- False +- X=a; False + +Jakie będą wszystkie możliwe wyniki wykonania niedeterministycznego zapytania: ?- append([_|_], [X|_], [A,a,B,b,C,c]), var(X). : +- X=b; X=c; False +-| X=B, X=C; False +- X=A; X=B; X=C; False +- X=a; X=b; X=c; False + +Jakie będą wszystkie możliwe wyniki wykonania niedeterministycznego zapytania: ?- append([_|_], [X|_], [A,a,B,b,C,c]), nonvar(X). : +- X=b; X=c; False +- X=B, X=C; False +- X=A; X=B; X=C; False +-| X=a; X=b; X=c; False + +Które z poniższych zapytań wybiera dowolną parę w dowolnej kolejności dwóch nie tych samych elementów z listy L: +-| ?- append(P, [X|R],L), append(P,R,Q), append(_,[Y|_],Q). +- ?- append(_, [X|R],L), append(_,[Y|_],R). +- ?- append(_, [X,Y|_],L). +- ?- append(_, [X|_],L), append(_,[Y|_],L). + +Które z poniższych zapytań wybiera dowolną parę dwóch zupełnie dowolnych elementów (bez ograniczeń kolejnościowych z listy L: +-| ?- append(_,[X|_],L), append(_,[Y|_],L). +- ?- append(_,[X|R],L), append(_,[Y|_],R). +- ?- append(_,[X,Y|_],L). +- ?- append([X],[_|Y],L). + +Niech abs oznacza funkcję arytmetyczną, zwracającą wartość bezwzględną liczby. Jaki będzie wynik działania zapytania ?- m([1,-3,8,-5,2,-4],X). dla definicji predykatów: m(L,X) :- member(X,L), a(X,L). a(X,L) :- L=[]; L=[H|T], abs(H)==abs(X), a(X,T). +- X = -4 +- X = -5 +- X = 8 +-| X = 1 + +Niech abs oznacza funkcję arytmetyczną, zwracającą wartość bezwzględną liczby. Jaki będzie wynik działania zapytania ?- m([-1,3,-8,5,-2,1],X). dla definicji predykatów: m(L,X) :- member(X,L), a(X,L). a(X,L) :- L=[]; L=[H|T], abs(H)==abs(X), a(X,T). +- X = -8 +-| X = -1 +- X = 5 +-| X = 1 + +Jaki będzie wynik działania zapytania ?- m([-1,3,-8,5,-2,1],X). dla definicji predykatów: m(L,X) :- member(X,L), a(X,L). a(X,L) :- L=[]; L=[H|T], H>=X, a(X,T). +- X = -4 +- X = 5 +-| X = -8 +- X = 1 + +Mając na uwadze niedeterminizm predykatu retract należy wskazać, które z poniższych odpowiedzi dla celu ?-g(X). są poprawne, jeżeli wcześniej zostały wydane zapytania ?- asserta(g(3)),asserta(g(2)),asserta(g(1)). ?- retract(g(X)). : +-| X=2; X=3; False +-| X=3; False +- X=1; X=2; X=3; False +-| False + +Mając na uwadze niedeterminizm predykatu retract należy wskazać, które z poniższych odpowiedzi dla celu ?-g(X). są poprawne, jeżeli wcześniej zostały wydane zapytania ?- assertz(g(3)),assertz(g(2)),assertz(g(1)). ?- retract(g(X)). : +- X=3; X=2; False +- X=3; False +- X=3; X=2; X=1; False +-| False +-| X=2; X=1; False +-| X=1; False + +Mając na uwadze niedeterminizm predykatu retract należy wskazać, które z poniższych odpowiedzi dla celu ?-g(X). są poprawne, jeżeli wcześniej zostały wydane zapytania ?- asserta(g(1)),asserta(g(2)),asserta(g(3)). ?- retract(g(X)). : +- X=3; X=2; False +- X=3; False +- X=3; X=2; X=1; False +-| False + +Mając na uwadze niedeterminizm predykatu retract należy wskazać, które z poniższych odpowiedzi dla celu ?-g(X). są poprawne, jeżeli wcześniej zostały wydane zapytania ?- assertz(g(1)),assertz(g(2)),assertz(g(3)). ?- retract(g(X)). : +- X=1; X=2; False +- X=1; False +- X=1; X=2; X=3; False +-| False + +Które z poniższych zapytań języka Prolog zakończą się spełnieniem celu: +- ?- atomic("X"). +-| ?- atomic('X'). +- ?- atomic(X). +- ?- atomic(_x_). +- ?- atomic(_ma). +-| ?- atomic('ROK'). +- ?- atomic("kok"). +-| ?- atomic('_'). +- ?- atomic(_). +- ?- atomic("_"). + +Które z poniższych obiektów języka Prolog są stałymi: +- "kok" +-| 'ROK' +- _ma +- X +-| 'x' +- "x" +-| x +-| '_' +-| 'X' +- _ +- "_" +- _x_ + +Stałe Symboliczne w języku Prolog +-| mają charakter globalnych obiektów języka +- mają zasięg lokalny ograniczony wyłącznie do jednej reguły +- mogą występować wyłącznie w zapytaniach albo w klauzulach, będących faktami +- mają zasięg ograniczony wyłącznie do zbioru klauzul o tym samym nagłówku + + +Łańcuchy znakowe (ang. string) w języku Prolog: +- mogą występować wyłącznie w zapytaniach albo klauzulach, będących faktami +-| wymagają użycia ograniczników w postaci znaków apostrofu +- wymagają użycia ograniczników w postaci znaków cudzysłowu +- mają zasięg lokalny ograniczony wyłącznie do jednej reguły +-| zaliczane są do atomów (inaczej: stałych atomowych) +-wymagają wcześniejszej deklaracji i określenia zasięgu wartości + +Identyfikator zmiennej w języku Prolog: +- ma zasięg globalny +-| jest lokalny względem pojedynczej klauzuli +- jest definiowany w momencie deklarowania dziedziny wartości zmiennej +- jest lokalny względem zbioru klauzul o tym samym nagłówku + +Wartości zmiennej w języku Prolog: +-| są lokalne względem jednej instancji klauzuli +- mają charakter globalny +- muszą być zgodne z zadeklarowanym wcześniej typem wartości +-| są ustalane w procesie unifikacji (uzgadniania) + +Atomy w języku Prolog: +-| obejmują stałe symboliczne oraz łańcuchy znakowe +- mogą występować wyłącznie w zapytaniach albo w klauzulach będących faktami +-| mają charakter globalnych obiektów języka +- mają zasięg lokalny ograniczony wyłącznie do jednej reguły +- wymagają wcześniejszej deklaracji i określenia zasięgu wartości + +Jaki będzie wynik wykonania poniższego zapytania: ?- [X|Y]=[d,d,c,b,b,a], bagof(Z^X, member(Z,Y), W).: +- W=[d^d,c^d,b^d,a^d]; False +- W=[d^d]; W=[d^d]; W=[c^d]; W=[b^d]; W=[b^d]; W=[a^d]; False +-| W=[d^d,c^d,b^d,b^d,a^d]; False +- W=[d^d]; W=[c^d]; W=[b^d]; W=[b^d]; W=[a^d]; False + +Jaki będzie wynik wykonania poniższego zapytania: ?- [X|Y]=[d,d,c,b,b,a], setof(Z^X, member(Z,Y), W).: +- W=[a^d]; W=[b^d]; W=[c^d]; W=[d^d]; False +-| W=[a^d, b^d, c^d, d^d]; False +- W=[a^d]; W=[b^d]; W=[b^d]; W=[c^d]; W=[d^d]; W=[d^d]; False +- W=[a^d, b^d, b^d, c^d, d^d, d^d]; False + +Jaki będzie wynik wykonania poniższego zapytania: ?- [X|Y]=[a,b,c,d], bagof(X#Z, append(_, [Z|_], Y), W).: +- W=[a#b, b#c, c#d]; False +- W=[a#b]; W=[b#c]; W=[c#d]; False +-| W=[a#b]; W=[a#c]; W=[a#d]; False +- W=[a#b]; False + + +Jaki będzie wynik wykonania poniższego zapytania: ?- [X|Y]=[a,b,c,d], bagof(X^Z, append(_, [Z|_], [X|Y]), W). +- W=[a^b, a^c, a^d]; False +- W=[a^b]; W=[a^c]; W=[a^d]; False +- W=[a^a, a^b, a^c, a^d]; False +-| W=[a^a]; W=[a^b]; W=[a^c]; W=[a^d]; False + +Jaki będzie wynik wykonania poniższego zapytania: ?- [X|Y]=[a,b,c,d], findall(X^Z, append(_, [Z,_|_], [X|Y]), W). +- W=[a^b, c^d] +- W=[a^a, a^b, a^c, a^d] +- W=[a^b, a^c, a^d] +-| W=[a^a, a^b, a^c] + + +Dla następującego programu prologowego: p(N):-N=1; N=2,!; N=3,!. , które z poniższych odpowiedzi są wszystkimi rozwiązaniami dla zapytania ?- p(X),!,p(Y). : +- X=1 Y=1 +- X=1 Y=1; X=2 Y=2 +-| X=1 Y=1; X=1 Y=2 +- X=1 Y=1; X=1 Y=2; X=1 Y=3 + +Dla następującego programu prologowego: p(1). p(2). p(3):-!., które z poniższych odpowiedzi są wszystkimi rozwiązaniami dla zapytania ?- p(X),!,p(Y). : +- X=1 Y=1 +-| X=1 Y=1; X=1 Y=2; X=1 Y=3 +- X=1 Y=1; X=1 Y=2 +- X=1 Y=1; X=1 Y=2; X=1 Y=3; X=2 Y=1; X=2 Y=2; X=2 Y=3; X=3 Y=1; X=3 Y=2; X=3 Y=3; + +Dla następującego programu prologowego: p(1). p(2):-!. p(3):-!., które z poniższych odpowiedzi są wszystkimi rozwiązaniami dla zapytania ?- p(X),p(Y),!. : +- X=1 Y=1; X=1 Y=2; X=2 Y=1; X=2 Y=2 +- X=1 Y=1; X=2 Y=2 +-| X=1 Y=1 +- X=1 Y=1; X=1 Y=2; X=1 Y=3; X=2 Y=1; X=2 Y=2; X=2 Y=3; X=3 Y=1; X=3 Y=2; X=3 Y=3; +- X=1 Y=1; X=1 Y=2; X=2 Y=1; X=2 Y=2 + +Dla następującego programu prologowego: p(N):-N=1; N=2; N=3, !. , które z poniższych odpowiedzi są wszystkimi rozwiązaniami dla zapytania ?- !, p(X), p(Y). : +- X=1 Y=1 +- X=1 Y=1; X=1 Y=2; X=1 Y=3 +-| X=1 Y=1; X=1 Y=2; X=1 Y=3; X=2 Y=1; X=2 Y=2; X=2 Y=3; X=3 Y=1; X=3 Y=2; X=3 Y=3; +- X=1 Y=1; X=2 Y=2; X=3 Y=3 + +Dla następującego programu prologowego: p(N):-N=1; N=2, !; N=3, !. , które z poniższych odpowiedzi są wszystkimi rozwiązaniami dla zapytania ?- !, p(X), p(Y). : +- X=1 Y=1 +- X=1 Y=1; X=2 Y=2 +-| X=1 Y=1; X=1 Y=2; X=2 Y=1; X=2 Y=2 +- X=1 Y=1; X=1 Y=2; X=1 Y=3; X=2 Y=1; X=2 Y=2; X=2 Y=3; X=3 Y=1; X=3 Y=2; X=3 Y=3; + +Dla następującego programu prologowego: p(1):-!. p(2):-!. p(3). ,które z poniższych odpowiedzi są wszystkimi rozwiązaniami zapytania ?- p(X),!,p(Y).: +- X=1 Y=1; X=2 Y=2 +-| X=1 Y=1 +- X=1 Y=1; X=1 Y=2 +- X=1 Y=1; X=1 Y=2; X=1 Y=3 + +Biorąc pod uwagę następujące definicje: smutny(X) :- not(szczęśliwy(X)). szczęśliwy(X) :- piękny(X), bogaty(X). bogaty(król). bogaty(książe). piękny(książe). piękny(śnieżka). +-| ?- smutny(król). true +- ?- smutny(król). false +-| ?- smutny(śnieżka). true +- ?- smutny(śnieżka). false +- ?- smutny(książe). true +-| ?- smutny(książe). false +-| ?- smutny(królowa). true +- ?- smutny(królowa). false +- ?- smutny(Ktoś). true +-| ?- smutny(Ktoś). false +-| ?- smutny(ktoś). true +- ?- smutny(ktoś). false + + +// Docs - "Zadania przepisane z odpowiedziami" + +Do ewaluacji wyrażenia będącego terminem złożonym z funktorem arytmetycznym dochodzi kiedy użyjemy operatora: +-= +-|< +-|=\= +-== +-|=:= +-|is + +Która z interpretacji deklaratywnych definicji klauzuli p:-!,a,b. p:-!,c,d. p:-e. jest kompletna i poprawna: +-p<=> (a ∧ b) ∨ (~a ∧ ~c ∧ e) +-p<=> (a ∧ b) ∨ (c ∧ d) ∨ e +-p<=> (~a ∧ b) ∨ (~c ∧ d) ∨ e +-|p<=> (a ∧ b) + +Dla następującego programu prologowego: p(1). p(2). p(3):-!. , które z poniższych odpowiedzi są wszystkimi rozwiązaniami dla zapytania ?- p(X),!,p(Y). +-|X=1 Y=1; X=1 Y=2; X=1 Y=3 +-X=1 Y=1; X=2 Y=2; X=3 Y=3 +-X=1 Y=1 +-X=2 Y=1; X=2 Y=2; X=2 Y=3; +-X=3 Y=1; X=3 Y=2; X=3 Y=3 + +Weryfikacja rodzaju termu odbywa się w języku Prolog za pomocą następujących metapredykatów systemowych: +-functor +-|var +-setof +-|atomic + +Predykaty użytkownika mogą być argumentami wywołania następujących metapredykatów systemowych: +-repeat +-|call +-|assert +-|bagof + +Jakie będą wszystkie możliwe wyniki wykonania zapytania: ?- member(X, [a,A,b,B,c,C]), var(X). +-X=a; False +-|X=A; X=B; X=C; False +-False +-X=a; X=b; X=c; False + +Stałe symboliczne w języku Prolog: +-wymagają wcześniejszej deklaracji i określenia zasięgu wartości +-|mają charakter globalny +-mają zasięg lokalny ograniczony do jednej reguły +-mogą występować wyłącznie w klauzulach będących faktami + +Jaki będzie wynik wykonania zapytania ?- functor(X,'.',2), arg(1,X,a), arg(2,X,[b]). +-|X=[a,b] +-X=[a,b,[]] +-X=[a|b] +-X=[a,[b]] + +Mając na uwadze niedeterminizm predykatu retract należy wskazać, które z poniższych odpowiedzi dla celu ?-g(X). są poprawne, jeżeli wcześniej zostały wydane zapytania: ?- asserta(g(1)),asserta(g(2)),asserta(g(3)). ?- retract(g(X)). +-X=3; X=2; X=1; False +-|X=2; X=1; False +-|X=1; False +-|False + +Mając na uwadze niedeterminizm predykatu retract należy wskazać, które z poniższych odpowiedzi dla celu ?-g(X). są poprawne, jeżeli wcześniej zostały wydane zapytania: ?- assertz(g(1)),assertz(g(2)),assertz(g(3)). ?- retract(g(X)). +-X=1; X=2; X=3; False +-|X=2; X=3; False +-|X=3; False +-|False + +Która z interpretacji deklaratywnych definicji klauzuli p:-!,a,b,!,c. p:-d jest kompletna i poprawna: +-p<=> (a ∧ b ∧ c) ∨ (~a ∧ ~c ∧ d) +-|p<=> (a ∧ b ∧ c) +-p<=> (a ∧ b ∧ c) ∨ (~a ∧ d) ∨ (~c ∧ d) +-p<=> (~a ∧ ~c) ∨ d + +Dla następującego programu prologowego: p(1). p(2). p(3):-!. , które z poniższych odpowiedzi są wszystkimi rozwiązaniami dla zapytania ?- !, p(X), !, p(Y). +-|X=1 Y=1; X=1 Y=2; X=1 Y=3 +-X=1 Y=1; X=2 Y=2; X=3 Y=3 +-X=1 Y=1 +-X=1 Y=1; X=1 Y=2; X=1 Y=3; +-X=2 Y=1; X=2 Y=2; X=2 Y=3; +-X=3 Y=1; X=3 Y=2; X=3 Y=3 + +Mając na uwadze fakt iż negacja w języku Prolog realizowana jest przez niepowodzenie należy dla reguły postaci: p(A,B) :- not(A=B), f(Z,A), f(Z,B). oraz dwóch faktów: f(a,m). f(a,n). wybrać odpowiedzi będące rezultatem zapytania: ?-p(X,Y). +-X=m Y=n; False +-X=m Y=n; X=n Y=m; False +-X=m Y=m; X=n Y=n; False +-|False + +Wartości zmiennych w języku Prolog +-|są ustalane w procesie unifikacji +-muszą być zgodne ze zdefiniowanym wcześniej typem wartości +-mają charakter globalny +-|są lokalne względem jednej instancji klauzuli + +Jaki będzie wynik wykonania zapytania ?- functor("f(n,n,n)",F,N). +-F=’f’ N=3 +-F=’|’ N=3 +-|F=’.’ N=2 +-False + +Dla następującego programu prologowego: p(N):- N=1; N=2,!; N=3,!. , które z poniższych odpowiedzi są wszystkimi rozwiązaniami dla zapytania ?- p(X),!,p(Y). +-X=1 Y=1; X=1 Y=2; X=2 Y=2 +-|X=1 Y=1; X=1 Y=2 +-X=1 Y=1; X=1 Y=2; X=1 Y=3; +-X=2 Y=1; X=2 Y=2; X=2 Y=3; +-X=3 Y=1; X=3 Y=2; X=3 Y=3 + +Które z poniższych zapytań zakończą się spełnieniem celu: +-|?- X=a, Y=a, X==Y. +-|?- X=Z, Y=Z, X==Y. +-|?- _\==_. +-?- X=f(_), Y=f(_), X==Y. + +Dla następującego programu prologowego: p(1). p(2):-!. p(3):-!. , które z poniższych odpowiedzi są wszystkimi rozwiązaniami dla zapytania ?- p(X),p(Y),!. +-X=1 Y=1; X=1 Y=2 +-|X=1 Y=1 +-X=1 Y=1; X=1 Y=2; X=2 Y=1; X=2 Y=2 +-X=1 Y=1; X=1 Y=2; X=1 Y=3; +-X=2 Y=1; X=2 Y=2; X=2 Y=3; +-X=3 Y=1; X=3 Y=2; X=3 Y=3 + +Która z interpretacji deklaratywnych definicji klauzuli p:-a,!,b,!,c. p:-d jest kompletna i poprawna: +-|p<=> (a ∧ b ∧ c) ∨ (~a ∧ d) +-p<=> (a ∧ b ∧ c) ∨ (~a ∧ ~b ∧ d) +-p<=> (a ∧ b ∧ c) ∨ (~a ∧ d) ∨ (~b ∧ d) +-p<=> (a ∧ ~b ∧ ~c) ∨ d + +Jaki będzie wynik wykonywania poniższego zapytania: ?- [X|Y] = [a,b,c,d], bagof(X+Z, append(_,[Z|_], Y), W) +-W=[a+b]; W=[b+c]; W=[c+d]; False +-W=[a+b, b+c, c+d]; False +-W=[a+b]; False +-|W=[a+b]; W=[a+c]; W=[a+d]; False + +Jakie będą wszystkie możliwe wyniki wykonania zapytania: ?- append([_|_], [X|_], [A,a,B,b,C,c]), var(X). +-X=b; X=c; False +-X=A; X=B; X=C; False +-X=a; X=b; X=c; False +-|X=B; X=C; False + +Jaki będzie wynik wykonania zapytania ?- functor(X, '.', 2), arg(1,X,[a]), arg(2,X,[[b]]). +-X=[a,b,[]] +-X=[a,b] +-|X=[[a],[b]] -X=[a,b] \ No newline at end of file