수색…


분리 논리합 (OR), 암시 적 대변

Prolog는 외양 순으로 술어에 대한 대체 절을 시도합니다.

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

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

분리 연산자 (OR) ; 이 규칙을 하나의 규칙으로 표현하는 데 사용할 수 있습니다.

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

명확성을 위해 괄호가 중요합니다. 참조 상대적 우선 순위에이 질문 결합에 대한 , 그리고 분리를 ; .

결합 (논리 AND)

결합 (논리 AND)은 쉼표 , 연산자 (다른 역할 중에서)로 표시됩니다.

절들 사이에 Conjunction이 쿼리에 나타날 수 있습니다.

?- X = 1, Y = 2.

결합은 규칙 본문의 부 조항 사이에도 나타날 수 있습니다.

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

잘라 내기 (선택 지점 제거)

때때로 Prolog가 대안 솔루션으로 되돌아가는 것을 방지하는 것이 바람직합니다. 프로그래머가 프롤로그를 계속해서 뒤로 미루는 것을 막을 수있는 기본 도구는 cut 연산자입니다. 다음을 고려하세요.

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

여기에서 술어 parent/2 는 두 번 이상 성공합니다.

?- parent(a,X).

호출됩니다. 프롤로그가 처음 발견 된 후에 프롤로그가 더 많은 솔루션을 찾지 못하게하려면 cut 연산자를 사용합니다.

?- parent(a,X), !.

이것은 X가 b와 같을 것이므로 (가능한 첫 번째 솔루션이므로) 더 이상 솔루션을 찾지 않습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow