Sök…


Disjunction (logisk ELLER), implicit vs. explict

Prolog försöker alternativa klausuler för ett predikat i utseende:

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

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

Operatören för disjunktion (OR) ; kan användas för att uttrycka detta i en regel:

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

Parenteser är viktiga här för tydlighet. Se denna fråga på relativ företräde för samverkan , och disjunktion ; .

Konjunktion (logisk OCH)

Konjunktion (logisk AND) representeras av komma , operatör (bland andra roller).

Samband mellan klausuler kan visas i en fråga:

?- X = 1, Y = 2.

Konjunktion kan också visas mellan subgoalsklausulerna i en regel:

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

Klipp ut (ta bort valpunkter)

Ibland är det önskvärt att förhindra Prolog från att spåra tillbaka till alternativa lösningar. Det grundläggande verktyget som är tillgängligt för programmeraren för att hindra prolog från att fortsätta ytterligare i sitt backtrack är den klippta operatören. överväga följande.

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

Här lyckas predikatföräldern parent/2 mer än en gång när

?- parent(a,X).

kallas. För att hindra prolog från att söka efter fler lösningar efter det första hittades skulle du använda den klippta operatören.

?- parent(a,X), !.

Detta kommer att ha X lika med b (eftersom det är den första möjliga lösningen) och leta efter fler lösningar.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow