2015-01-28 2 views
2

내가 같이 실행되는 방식으로, 술어, likes/2를 작성하려고하고 다음술어 인쇄 아웃 "예기치 않은"거짓

% Define your facts: 
combo(lindsay,alan). 
combo(chloe,alan). 
combo(cheyanne,alan). 
combo(britney,alan). 

% Define your predicate: 
likes(A,B) :- combo(A,B); combo(B,A). 
:

여기
?- likes(A,alan). 
A = lindsay ; 
A = chloe ; 
A = cheyanne ; 
A = britney ; 

내가 문제를 태클하고 어떻게

지금 직면하고있는 문제는 내 프로그램이 정상적으로 작동하는 동안 기능을 수행하지만 결국에는 오류를 인쇄하고 이유를 이해할 수 없다는 것입니다. 전체 출력은 다음과 같습니다.

?- likes(A,alan). 
A = lindsay ; 
A = chloe ; 
A = cheyanne ; 
A = britney ; 
false. 
+0

[답변] (http://stackoverflow.com/search?q=%5Bprolog-toplevel%5D+false) – false

답변

1

짧은 답변. Prolog 최상위 레벨 인터프리터는 u 리에 대한 더 이상의 증명이 없음을 항상 감지 할 수있는 것은 아 U니다. 그래서, 귀하의 경우, 해결책을 준 후 A = britney 그것은 당신에게 또 다른 해결책이 필요한지 묻습니다.

likes(A,alan) 쿼리의 특정 경우에 조건부에 대한 단일 절은 추론 엔진이 combo(A,alan); combo(alan,A)을 증명하려고한다는 것을 의미합니다. 이 분리의 왼쪽 목표는 당신에게 네 가지 해결책을 제공합니다. 그러나 올바른 솔루션은 하나 이상의 솔루션을 제공 할 수도 있지만 엔진에서는 combo/2에 대한 절이 첫 번째 인수로 alan의 절이 없으므로 목표를 시도하여이를 분류 할 수 있습니다. 올바른 목표를 증명하지 못하면 false이 인쇄됩니다.

+0

거짓 표시를 중지하기 위해 무엇을해야할지 혼란 스럽습니다. 나는 이름이 어떤 순서로 주어질 수 있기 때문에 방정식의 오른쪽을 제거 할 수 없다. 어떻게해야합니까? 아니면 이런 일이 일어날 것입니까? –

+1

@ TheHound 왜 '거짓'응답에 대해 걱정하고 있습니까? 그것은 정상적으로 정상이며 Prolog로부터 기대됩니다. 그것은 이미 표시된 것들보다 많은 해결책을 찾지 못했다는 것입니다. – lurker

+0

@lurker 아, 나는 몰랐다. 나는 프롤로그에 처음 왔어. 그래서 나는 모든 것에 익숙해 져있다. –