0

私のプロローグ プログラムでは、エドワード 8 世が生まれたときの統治者を見つけることには成功しますが、何らかの理由で失敗することもあります。ここに私のコードの小さなチャンクがあります:

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'.

これは何が原因ですか?

4

1 に答える 1

0

変数 (この場合は誰) がある場合、すべての可能な値 (この場合は「ビクトリア女王」、「エドワード 7 世」、「エリザベス 2 世女王」) を想定し、それらすべてから true を見つけようとします。したがって、最後に true が見つかった場合は false を表示しません (最初のケース)。それ以外の場合は、結果を表示して検索を続け (複数の結果が存在する可能性があるため)、何も見つからない場合は false を表示します。 .

于 2013-04-21T07:16:08.363 に答える