혼란은 프롤로그가 결과를 표시하는 방법에 관한 것입니다. 프롤로그에서 쿼리를 만들면 가능한 모든 대답을 찾으려고 시도합니다. 즉, 첫 번째 사실 또는 절에서 시작하여 순차적으로 통과하고 결국 쿼리를 true로 만들면 대답을 표시합니다. 프롤로그에 선택 지점이있는 경우 프롤로그는 사용자에게보다 성공적인 솔루션을 찾도록 요청합니다.의 경우
는 :
?- false ; true.
이 쿼리는 분리 ;
이 이후, true
인 ;
후 절을 확인하고 실패하고 절 false
,보고 시작합니다. 이 성공하고 프롤로그 표시 :이 솔루션을 발견했을 때, 더 이상 선택이 없었다
true
하는 것으로, 그래서 더 솔루션에 대한 프롬프트가 없습니다. 이제
의 두 번째 예를 살펴 보자 :
?- true ; false.
프롤로그 첫 번째 절 true
에서보고, 성공하고 사용자 말한다 : '
true
그러나이 경우
, 그것은 여태을 다른 선택을 만들었던
;
의 분리가 있기 때문에 가능한 모든 해결책을 다 써 버렸습니다. 그래서 당신은 프롬프트에서
;
를 입력 할 때 : 당신은 더 해결책을 찾기 위해 프롤로그에게
true ;
. Prolog가 돌아가서 분리 후 절을 검사하고 false
을 만난다. 이것은 실패하고 다른 해결책은 없습니다. 따라서, 상기 솔루션에 대한 요청이 실패 프롤로그 출력 false
:
true ;
false
제 true
이 성공한 것을 의미한다. false
은 더 이상의 솔루션을 찾지 못했고 두 번째 시도에서 실패했음을 의미합니다.
프롤로그의 행동은 적절한 절을 통해 순차적으로 솔루션을 찾고 실패 할 때까지 요청하는 것입니다. 마침내 실패하면 false
이됩니다. 일부 프롤로그는 no
을 출력합니다. 위의 동작은 commutativity 문제가 아닙니다.
[Prolog에서 마지막으로 구현] ([http://stackoverflow.com/questions/11734986/implementing-last-in-prolog] – false