2013-04-21 4 views
0

내 프롤로그 프로그램에서 King Edward VIII가 태어 났을 때 누가 지배했는지 발견하는데 성공하지만 어떤 이유로 든 실패합니다.이 쿼리가 프롤로그에서 성공하고 실패하는 이유는 무엇입니까?

reigned('Queen Victoria', 1819, 1901). 
reigned('King Edward VII', 1901, 1910). 
reigned('Queen Elizabeth II', 1952, 2013). 
born('King George V', 1865). 
born('King Edward VIII', 1894). 
born('King George VI', 1895). 
born('Prince Henry', 1984). 

regentWhenBorn(X, Y) :- reigned(X, Begin, End), born(Y, Born), 
         Begin =< Born, Born =< End. 

이 무엇 프롤로그 표시입니다 :

?- regentWhenBorn(Who, 'King Edward VIII'). 
Who = 'Queen Victoria' ; 
false. 

하거나 다른 사람

..이 원인을

?- regentWhenBorn(Who, 'Prince Henry'). 
Who = 'Queen Elizabeth II' ; 
Who = 'Queen Elizabeth II'. 

여기 내 코드의 작은 덩어리이다?

+0

코드가 좋다. 어딘가에 중복 된 조항이있을 수 있습니다. 깨끗한 소스 파일을 만들고 다시 시도하십시오. :) –

답변

0

변수가있는 경우 (이 경우 Who) 가능한 모든 값 (이 경우 'Queen Victoria', 'King Edward VII'및 'Queen Elizabeth II')을 모두 가정하고 모두에게 진실을 찾으 라. 그래서 마지막으로 사실이라면 거짓 (첫 번째 경우)을 표시하지 않으며 그렇지 않으면 결과를 표시하고 계속 볼 수 있습니다 (여러 결과가있을 수 있기 때문에). 아무 것도 찾을 수 없으면 false를 표시합니다 .

관련 문제