2013-04-21 119 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 。