Proste przykłady w Prologu

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.

[Total: 0    Average: 0/5]