- Co to jest programowanie w logice?
- Co to jest predykat?
W jaki sposób możemy opisać fakt?
Przykład: facts.pl (uruchamiamy pisząc swipl facts.pl).
Jak zadawać pytania?
kot(X)pies(X), teraz_glodny(X)
Różnica pomiędzy stałymi i zmiennymi.
Co to są predykaty wieloargumentowe?
Przykład: like.pl
Jakbyście zapytali o to, kogo lubi Jan? A o pary ludzi, którzy lubią się wzajemnie?
- Reguły wnioskowania
- Przykład:
rules.pl
Drzewo genealogiczne
- podajcie kilka faktów postaci
ojciec(siemomysl, mieszko1) - utwórzcie predykat
wnuk
Oprócz orzekania o napisach (np. kot(pikus), czyli pikus to obiekt, dla którego
zachodzi własność kot), można orzekać o obiektach: trzymam_w_domu(kot(pikus, 10, 7)).
Czytamy to: "kot(pikus, 10, 7) to obiekt, dla którego zachodzi własność trzymam_w_domu.
Napisz predykat co na podstawie imienia znajdzie ile zwierzę (z facts2.pl) ma lat.
Napisz predykat co na podstawie imienia znajdzie zwierzęta mające (z facts2.pl) ileś lat.
- Co to jest lista?
- Lista pusta kontra lista niepusta.
Możemy wprowadzać predykaty używające innych pomocniczych predykatów, często o wyższej arności.
Często używa się techniki „z akumulatorem”, czyli wprowadzamy pomocniczy argument, w którym akumulowany jest wynik.
- Napiszcie predykat
odwroc(Lista, Wynik)który zachodzi, gdy listaWynikjest odwróconą listąLista. Uwaga: czy kolejność argumentów ma w tym przypadku znaczenie? Porównajodwroc([a,b,c], X)orazodwroc(X, [a,b,c]). filtruj(Lista, Element, Wynik)- zachodzi, gdyWynikzawiera tylkoElementy - i to dokładnie tyle, co występuje wLista.unikalne(Lista, Wynik)- zachodzi, gdyWynikzawiera wszystkie rodzaje elementów zLista, ale bez powtórzeń. Kolejność występowania elementów wWynikma być zgodna z kolejnością pierwszych wystąpień elementów wLista.
palindrom(A)- zachodzi, gdy A jest palindromem. Jaka jest definicja palindromu?
polacz(A, B, C)- zachodzi, gdy listaCjest wynikiem konkatenacjiAzB, np.polacz([m,a], [c,h], [m,a,c,h]).srodek(Lista, Wynik)- zachodzi, gdyWynikjest środkowym elementem/podlistą listyLista. Umówmy się, że zachodzisrodek([a, b, c], b)orazsrodek([a,b,c,d], [b,c]).
Łatwo można sprawdzić, że zachodzi 2 = 2. Natomiast 2 + 2 = 4 da nam false. Dlaczego?
Do ewaluacji wyrażeń arytmetycznych używamy predykatu is/2.
Z is W odnosi sukces wtedy i tylko wtedy, gdy W jest termem reprezentującym wyrażenie arytmetyczne, którego wszystkie składowe mają znaną wartość (liczbową) oraz Z jest uzgadnialne z wartością tego wyrażenia (Z może być stałą liczbową albo zmienną). Przykłady:
| ?- 2 is 1+1.
yes
| ?- X is 1+1.
X = 2 ? ;
no(no oznacza, że nie ma więcej rozwiązań niż X = 2)
Istnieją także predykaty =:=/2 oraz =\=/2.
+/2, -/2, */2 - standardowe
-/1 - negacja
// - dzielenie całkowite, / - dzielenie zmiennoprzecinkowe
mod - modulo
nwd(A, B, C)- zachodzi, gdy C jest największym wspólnym dzielnikiem A i B.wp(A, B)- zachodzi, gdy A i B są względnie pierwsze.
W Prologu mamy dostęp do pewnego szczególnego typu negacji - służy do tego predykat \+ (o arności 1).
Wyrażenie \+ X jest prawdziwe, gdy X nie da się dowieść przy obecnej wiedzy.
pierwsza(X)- zachodzi, gdy X jest liczbą pierwszą.