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.

这是 prolog 显示的内容:

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

或为不同的人..

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

这是什么原因造成的?

4

1 回答 1

0

当有一个变量(在本例中为 Who)时,它会假设所有可能的值(在本例中为“维多利亚女王”、“爱德华七世国王”和“伊丽莎白二世女王”),并尝试所有这些值以找到一个真值。因此,如果最后一个结果为真,那么它不会显示假(你的第一种情况),否则它会显示结果并继续查找(因为可能有多个结果),当它找不到任何结果时,它会显示假.

于 2013-04-21T07:16:08.363 回答