Files
deklaratywne-machen/pytania.txt

667 lines
23 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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,-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
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]