Prolog Language
Structures de contrôle
Recherche…
Disjonction (OU logique), implicite vs explicite
Prolog essaie des clauses alternatives pour un prédicat dans l'ordre d'apparition:
likes(alice, music).
likes(bob, hiking).
// Either alice likes music, or bob likes hiking will succeed.
L'opérateur de disjonction (OR) ;
peut être utilisé pour exprimer ceci dans une règle:
likes(P,Q) :-
( P = alice , Q = music ) ; ( P = bob , Q = hiking ).
Les parenthèses sont importantes ici pour plus de clarté. Voir cette question sur la ,
;
préséance relative pour la conjonction ,
et disjonction ;
.
Conjonction (ET logique)
La conjonction (ET logique) est représentée par la virgule ,
opérateur (entre autres rôles).
La conjonction entre les clauses peut apparaître dans une requête:
?- X = 1, Y = 2.
La conjonction peut également apparaître entre les clauses sous-jacent du corps d'une règle:
triangleSides(X,Y,Z) :-
X + Y > Z, X + Z > Y, Y + Z > X.
Couper (supprimer les points de choix)
Parfois, il est souhaitable d'empêcher Prolog de revenir en arrière dans des solutions alternatives. L'outil de base à la disposition du programmeur pour empêcher Prolog de continuer à se poursuivre dans son backtrack est l'opérateur cut. considérer ce qui suit.
% (percent signs mean comments)
% a is the parent of b, c, and d.
parent(a,b).
parent(a,c).
parent(a,d).
Ici, le prédicat parent/2
réussit plus d’une fois lorsque
?- parent(a,X).
est appelé. Pour empêcher Prolog de rechercher d'autres solutions après la découverte du premier, vous devez utiliser l'opérateur cut, comme ceci.
?- parent(a,X), !.
Cela aura X égal à b (car c'est la première solution possible) et ne cherche plus de solutions.