Suche…


Disjunktion (logisches ODER), implizit vs. explikt

Prolog versucht alternative Klauseln für ein Prädikat in der Reihenfolge des Erscheinens:

likes(alice, music).
likes(bob, hiking).

// Either alice likes music, or bob likes hiking will succeed.

Der Disjunktionsoperator (OR) ; kann verwendet werden, um dies in einer Regel auszudrücken:

likes(P,Q) :-
    ( P = alice , Q = music ) ; ( P = bob , Q = hiking ).

Klammern sind hier für die Klarheit wichtig. Sehen Sie diese Frage in der , ; relativen Vorrang für Verbindung , und Disjunktion ; .

Konjunktion (logisches UND)

Konjunktion (logisches UND) wird durch Komma , Operator (unter anderen Rollen) dargestellt.

Konjunktion zwischen Klauseln kann in einer Abfrage erscheinen:

?- X = 1, Y = 2.

Konjunktion kann auch zwischen den Unterzielklauseln im Hauptteil einer Regel stehen:

triangleSides(X,Y,Z) :-
    X + Y > Z, X + Z > Y, Y + Z > X.

Ausschneiden (Auswahlpunkte entfernen)

Manchmal ist es wünschenswert, zu verhindern, dass Prolog in alternative Lösungen zurückverfolgt wird. Das grundlegende Werkzeug, das dem Programmierer zur Verfügung steht, um zu verhindern, dass Prolog in seinem Backtrack fortfährt, ist der Cut-Operator. Folgendes berücksichtigen.

% (percent signs mean comments)
% a is the parent of b, c, and d.
parent(a,b).
parent(a,c).
parent(a,d).

Hier ist das Prädikat parent/2 mehr als einmal erfolgreich, wenn

?- parent(a,X).

wird genannt. Um zu verhindern, dass Prolog nach weiteren Lösungen sucht, nachdem Sie die erste gefunden haben, würden Sie den Cut-Operator verwenden.

?- parent(a,X), !.

Dies wird X gleich b haben (da dies die erste mögliche Lösung ist), und es werden keine Lösungen mehr gesucht.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow