- Długość listy można w Prologu zdefiniować następująco.
length(0, []).
length(N, [_|L]) :- length(M, L), N is M+1.
Proszę zdefiniować predykaty fib/2 oraz nwd/3.
- Niech będzie dana baza danych zawierająca predykaty parent/2, female/1
i male/1.
Proszę zdefiniować predykaty child/2, mother/2, sister/2,
has_a_child/1, grandparent/2 oraz predecessor/2.
- Niech będą dane następujące predykaty.
q1(X,Y) :- p(X,Y). q2(X,Y) :- p(X,Z), q2(Z,Y).
q1(X,Y) :- p(X,Z), q1(Z,Y). q2(X,Y) :- p(X,Y).
q3(X,Y) :- p(X,Y). q4(X,Y) :- q4(X,Z), p(Z,Y).
q3(X,Y) :- q3(X,Z), p(Z,Y). q4(X,Y) :- p(X,Y).
oraz baza danych dla predykat p:
p(pam,bob).
p(tom,bob).
p(tom,liz).
p(bob,ann).
p(bob,pat).
p(pat,jim).
Przy użyciu "drzew odpowiedzi" proszę ilustrować, jak Prolog odpowiada na
pytania qi(tom,pat). oraz qi(liz,jim).
- Niech będzie dany następujący program.
f(1,one).
f(s(1),two).
f(s(s(1)),three).
f(s(s(s(X))),N) :- f(X,N).
Jak odpowiada Prolog na pytanie
- f(s(1),A)?
- f(s(s(1)),two)?
- f(s(s(s(s(s(s(1)))))),C)?
- f(D,three)?
- f(s(s(s(s(s(s(X)))))),E)?
- Proszę zdefiniować następujące predykaty dla list.
- delete(X,L1,L2), który jest spełniony, jeżeli L2 równa się L1 bez elementu X.
- delete(L1,L2), który jest spełniony, jeżeli L2 równa się L1 bez ostatnich trzech elemnetów.
- p(X,L,Y,Z), który jest spełniony, jeżeli Y jest poprzednikiem elementu X w liście L a Z następcą elementu X w liście L.
Przykład: ?- p(3, [1,2,3,4,5], Y, Z).
Y = 2, Z = 4
- q(X,L1,L2), który jest spełniony, jeżeli L2 równa się początku listy L1 do podwójnego wystąpienia elementu X.
Przykład: ?- q(3, [1,2,3,3,1,2,4], Z).
Z = [1,2,3,3]
- evenlength(L) oraz oddlength(L), które są spełnione, jeżeli długość listy L jest parzysta oraz nieparzysta.
- shift(L1,L2), który jest spełniony, jeżeli L2 równa się L1 po jednej rotacji do lewej.
Przykład: ?- shift([1,2,3,4,5], L).
L = [2,3,4,5,1]
- palindrom(L), który jest spełniony, jeżeli lista L zawiera palindrom.
Przykłady: ?- palindrom([a,b,c]).
no
?- palindrom([a,b,c,d,c,b,a]).
yes
- Proszę zdefiniować następujące predykaty dla list.
- flatten(L1,L2), który jest spełniony, jeżeli lista L2 jest wersją płaską listy L1.
- ordered(L), który jest spełniony, jeżeli lista L jest posortowana.
- mergesort(L1,L2), który jest spełniony, jeżeli lista L2 jest wersją posortowaną listy L1.
Predykat ma simulowac algorytm quicksort.
- Niech będą dane następująca defincja predykatu append.
append([X|L1], L2, [X|L3]) :- append(L1, L2, L3).
append([], L, L).
Przy użyciu drzewa wykonywania proszę ilustrować, jak Prolog odpowiada na pytanie
?- append(X, [3,4], [2,3,4]).
- Proszę zdefiniować predykat permutation(L,P), który jest spełniony, jeżeli lista P jest permutacją
listy L.
Przy użyciu ";" powiennien być możliwe wyliczać wszystkie permutacje listy L.
- Proszę zdefiniować następujące predykaty
- nth(N,L,X), który jest spełniony, jeżeli X jest N-tym elementem listy L.
- sorted(L), który jest spełniony, jeżeli lista L jest posortowana.
- zrealizujący algorytm mergesort.
Jak można zdefiniować predykat permutation z zadania 10. używając mergesort?
- Proszę zdefiniować predykat number(Z), który znajduje wszystkie trzy-cyfrowe liczby,
które można podzielić prez 5 i 6 oraz mają resztę 3, jeżeli zostają podzielone przez 9.
- Proszę zdefiniować następujące predykaty
- sum(D,X), który jest spełniony, jeżeli X jest sumą wszystkich elementów
w drzewie D.
- search(X,D), który znajduje element X w drzewie D.
- post(D,L), który jest spełniony, jeżeli lista L zawiera wszystkie elementy
drzewa D w porządu postfiksowym.
- Używając dzrewa wykonania proszę pokazać jak Prolog odpowiada na następujące pytania.
-
p(1).
p(2) :- !.
p(3).
?- p(x). ?- p(x), p(y). ?- p(x), !, p(y).
-
p(x) :- a(x).
p(x) :- b(x), c(x), !, d(x).
p(x) :- f(x).
a(1). b(1). c(1).
b(2). c(2). d(2).
f(3).
?- p(x).
- Niech będzie dana następująca definicja.
max(X,Y,X) :- X >= Y, !.
max(X,Y,Y).
Na kolejne pytanie Prolog odpowiada "błędnie":
?- max(5,2,2).
yes
Dlaczego Prolog tak odpowiada i jak można to zreperować (bez zmian cut'u i drugiej reguły)?
- Proszę zdefiniować predykat difference(A, B, C), który jest spełniony, jeżeli C = A \ B .