2013-04-21 120 views
0

在我的序言程序中,它成功地发现了当爱德华八世国王出生时是谁统治的,但由于某种原因也失败了。这里是我的代码一小块:为什么这个查询成功,并在序言中失败?

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

代码是好的;你可能在某处重复了一些子句。制作一个干净的源文件并重试。 :) – 2013-04-22 07:05:58

回答

0

当存在一个变量(在这种情况下是谁)时,它假设所有可能的值(在本例中是'维多利亚女王','爱德华七世国王'和'伊丽莎白二世女王'),找到一个真实的。所以,如果最后发现它真的不会显示false(你的第一种情况),否则它会显示结果并继续寻找(因为可能有多个结果),并且当它无法找到任何结果时,它会显示false 。

相关问题