2011-12-15 2 views
1

나는 다음과 같은 조항이 있습니다 c(A,B)은 두 가지 솔루션을 반환프롤로그 와일드 카드

a(1). 
a(a). 
b(3). 
b(a). 
c(A,B) :- b(B),!,a(A). 
c(X,_) :- a(X),b(X). 

쿼리 : 나는 c(A,B)을 추적하고 프롤로그도 두 번째 절 (c(X,_))을하지 않는 것으로 나타났습니다 A = 1, B = 3 and A = a, B = 3. 합니다. 왜 이렇게이다?

답변

3

프롤로그 컷 프리디 케이트 또는 '!'는 선택을 제거합니다. 프롤로그 파생 트리입니다.

here

+1

는 감사의 역할 확인하시기 바랍니다! 나는 커트의 역할을 오해 한 것 같다. 나는 그것이 첫 번째 선택에 전념했다고 생각했지만 분석되는 조항에 대해서만 생각했습니다. 나는 하나의 규칙에서 상처를 만났을 때 다른 규칙을 시도 할 때 아무런 결과가 없다고 생각했다. –