Szukaj…


Rozłączenie (logiczne OR), niejawne vs. jawne

Prolog próbuje alternatywnych klauzul dla predykatu w kolejności pojawiania się:

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

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

Operator rozłączenia (OR) ; można tego wyrazić za pomocą jednej reguły:

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

Nawiasy są tutaj ważne dla jasności. Zobacz to pytanie na względnego pierwszeństwa w połączeniu , a alternatywy ; .

Koniunkcja (logiczne AND)

Koniunkcja (logiczne AND) jest reprezentowana przez przecinek , operator (między innymi rolami).

Koniunkcja między klauzulami może pojawić się w zapytaniu:

?- X = 1, Y = 2.

Koniunkcja może również pojawić się między klauzulami podrzędnymi w treści reguły:

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

Wytnij (usuń punkty wyboru)

Czasami pożądane jest zapobieganie cofaniu się Prologa do alternatywnych rozwiązań. Podstawowym narzędziem dostępnym dla programisty, aby zapobiec dalszemu kontynuowaniu prologu na ścieżce wstecznej, jest operator cięcia. rozważ następujące.

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

Tutaj predykat parent/2 odnosi sukces więcej niż raz, kiedy

?- parent(a,X).

jest nazywany. Aby powstrzymać prologa od szukania kolejnych rozwiązań po znalezieniu pierwszego, należy użyć operatora cięcia, podobnie jak to.

?- parent(a,X), !.

Będzie to miało X równe b (ponieważ jest to pierwsze możliwe rozwiązanie) i nie będzie poszukiwać więcej rozwiązań.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow