Zoeken…


Disjunctie (logische OF), impliciet versus explict

Prolog probeert alternatieve clausules voor een predikaat in de volgorde van verschijnen:

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

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

De disjunctie (OF) -operator ; kan worden gebruikt om dit in één regel uit te drukken:

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

Haakjes zijn hier belangrijk voor de duidelijkheid. Zie deze Vraag over het relatieve voorrang voor samenwerking , en de scheiding ; .

Conjunctie (logische EN)

Conjunctie (logische EN) wordt vertegenwoordigd door de komma , operator (onder andere rollen).

Combinatie tussen clausules kan in een zoekopdracht voorkomen:

?- X = 1, Y = 2.

Combinatie kan ook voorkomen tussen de subgoal-clausules in de hoofdtekst van een regel:

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

Knippen (keuzepunten verwijderen)

Soms is het wenselijk om te voorkomen dat Prolog terugkeert naar alternatieve oplossingen. Het basistool dat de programmeur ter beschikking heeft om te voorkomen dat proloog verder in zijn backtrack verder gaat, is de snijoperator. stel je de volgende situatie voor.

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

Hier slaagt het predicaat parent/2 meer dan eens wanneer

?- parent(a,X).

wordt genoemd. Als u wilt voorkomen dat Prolog naar meer oplossingen zoekt nadat de eerste is gevonden, gebruikt u de operator Snijden.

?- parent(a,X), !.

Dit heeft X gelijk aan b (omdat dit de eerste mogelijke oplossing is) en zoekt naar geen oplossingen meer.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow