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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow