Niewiele w Internecie prostych, krótkich i działających za pierwszym razem snippetów z Prologa, zatem podaje kilka swoich, które napisane i używane zostały podczas wykładów na AU.
% poniży kod doda liczby, niezależnie od tego w jakiej kolejności zostały podane add(A,B,R):- A = R - B. add(A,B,R):- R = A + B. add(A,B,R):- B = R - A. % silnia z 0 to z definicji 1 factorial(0, 1). % rekurencyjnie oblicza silnię z podanej liczby X % zmniejsza wartość X co każde wywołanie. % liczy silnię, aż wywoła definicję powyżej factorial(X, RESULT) :- R1 is X-1, factorial(R1, R2), RESULT is R2 * X. male(mark). % fact male(jonah). % fact female(marie). female(sophie). female(marcie). parent_of(jonah, mark). parent_of(marcie, mark). parent_of(sophie, mark). parent_of(jonah, marie). parent_of(marcie, marie). parent_of(sophie, marie). mother_of(X,Y) :- parent_of(X,Y), female(Y). % rule father_of(X,Y) :- parent_of(X,Y), male(Y). |
Zapisz powyższy kod w pliku test.pl, z konsoli uruchom:
$ swipl
a potem używaj:
For help, use ?- help(Topic). or ?- apropos(Word). ?- ['test']. Warning: /home/agilob/test.pl:1: Singleton variables: [A,I] % test compiled 0.00 sec, 4,688 bytes true. ?- add(1, X, 4). true ; X = 4-1. ?- factorial(1, X). X = 1 . ?- factorial(6, X). X = 720 ; ?- male(mark). true. ?- female(marie). true. ?- halt. $ |
Jeśli chcesz śledzić zmiany w kodzie możesz sprawdzać w repozytorium.
Dłuższy kod został opisany w tym poście, a jego kod jest w drugim repozytorium.