为什么这个查询成功并且在prolog中失败了?

时间:2013-04-21 06:53:09

标签: prolog

在我的prolog程序中,它成功地找到了爱德华八世出生时的统治者,但由于某种原因也失败了。这是我的一小部分代码:

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.

这是prolog显示的内容:

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

或另一个人......

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

造成这种情况的原因是什么?

1 个答案:

答案 0 :(得分:0)

如果有变量(在这种情况下是谁),它会假定所有可能的值(在这种情况下为“维多利亚女王”,“爱德华七世王”和“女王伊丽莎白二世”)并且它会尝试所有这些值一个真实的。所以,如果它找到了最后一个那么它不显示false(你的第一个案例),否则它显示结果并继续查找(因为可能有多个结果),当它无法找到任何结果时,它显示为false