2011-02-17 4 views
1

나는 프롤로그를 가르쳐서 내가 가지고있는 문제를 해결할 수있는 적합성을 결정하려고 노력 중이다. 근본적으로 문제는 항목 간 상호 작용에 대한 일련의 규칙이 주어지며 어떤 항목이 사용 가능한지, 사용할 수 없는지, 선택되었는지, 선택되지 않았는지를 결정하는 것입니다.간단한 프롤로그 프로그램

그러나 나는 심지어 가장 단순한 부분에서도 실패하고 있습니다! 나는 내가 할 수있는 것을보기 위해 문제의 크기를 급격하게 줄였습니다. 다음은 내 지식 기반입니다 :

selected(A) :- implied(A). 
implied(B) :- implies(A,B),selected(A). 

implied(option_one). 
implies(option_one,option_two). 

를 내가 쿼리 할 때 :

selected(X). 

난 단지 option_two 다시 얻을.

나는 여기에 대해 이해하지 못하는 매우 기본적인 무언가가있는 것처럼 보이지만 option_one도 그 목록에 다시 와야한다고 생각합니다 (특히 사실 중 하나가 '묵시적 (option_one)'이기 때문에). 이 중요한 경우

, 나는 같은 결과를 줄 SWI - 프롤로그,뿐만 아니라이 사용 P 번호를 시도했습니다

답변

3

u는 당신의 첫 번째 대답 X = option_two 눌러 있을 때,. 다음 대답

를 얻을 수
?- selected(X). 
X = option_two ; 
X = option_one. 

또는 일치하는 모든 것을 표시하기 위해 다음과 같이 smth를 사용할 수 있습니다.

?- selected(X), writeln(X), fail. 
option_two 
option_one 
false. 
+0

와우 ... 지금은 정말 바보 같아요. 나는 그것이 한 번에 하나의 결과만을 줄 것이라는 것을 알았지 만, 어떤 이유로 나는 'Enter'를 다시 치면 다음 결과를 얻을 것이라고 생각했다. –

+0

괜찮습니다. Btw, 정말 많이 원하는 방법을 얻을 수 있습니다. 'findall (X, selected (X), List)' –

+1

최근 SWI 버전에서는 SPACE를 눌러 더 많은 솔루션을 얻을 수 있습니다. – mat