Prolog Language
Strutture di controllo
Ricerca…
Disgiunzione (OR logico), implicita contro esplicita
Prolog prova le clausole alternative per un predicato nell'ordine di apparizione:
likes(alice, music).
likes(bob, hiking).
// Either alice likes music, or bob likes hiking will succeed.
L'operatore di disgiunzione (OR) ;
può essere usato per esprimere questo in una regola:
likes(P,Q) :-
( P = alice , Q = music ) ; ( P = bob , Q = hiking ).
Le parentesi sono importanti qui per chiarezza. Vedere questa domanda la precedenza rispetto per la collaborazione ,
e la disgiunzione ;
.
Congiunzione (logico AND)
La congiunzione (AND logico) è rappresentata dalla virgola ,
operatore (tra gli altri ruoli).
La congiunzione tra clausole può apparire in una query:
?- X = 1, Y = 2.
Congiunzione può anche apparire tra le clausole subgoal nel corpo di una regola:
triangleSides(X,Y,Z) :-
X + Y > Z, X + Z > Y, Y + Z > X.
Taglia (rimuovi punti di scelta)
A volte è auspicabile impedire a Prolog di tornare indietro in soluzioni alternative. Lo strumento di base a disposizione del programmatore per impedire al prologo di continuare a tornare nel suo backtrack è l'operatore di taglio. considerare quanto segue.
% (percent signs mean comments)
% a is the parent of b, c, and d.
parent(a,b).
parent(a,c).
parent(a,d).
Qui il predicato parent/2
succede più di una volta quando
?- parent(a,X).
è chiamato. Per evitare che il prologo cerchi altre soluzioni dopo che il primo è stato trovato, si utilizzerà l'operatore di taglio, in questo modo.
?- parent(a,X), !.
Questo avrà X uguale a b (come è la prima soluzione possibile) e non cercherò più soluzioni.