2017-02-28 7 views
0

私は、次のルールがある場合:なぜ停止しないのですか?

test(X, Y, abc) :- X=='true' ; Y =='true'. 

をし、私のようなクエリを作る:test(true, true, X).

なぜだろう、それを出力X = abc ?倍?

| ?- test(true, true, X). 
X = abc ? n 
X = abc ? n 
no 

一度だけ回答してはいけませんか?

X == trueを見つけて停止しないでください.1つの条件だけが真の場合、条件全体が真だからです。

+2

ルールが 'X == true'または' Y == true'の場合にtrueと表示されるため、 'test(true、true、abc)'が2回成功します。したがって、2つの異なる方法で成功します。 Prologはすべてのソリューションを表示します。 – lurker

+2

... 'true 'の代わりに' true'を書くことができます – false

答えて

1

これは、Prologがすべての可能な解決策を見つけようとしている可能性があり、そうするために可能なすべてのパスに従うためです。あなたは真実性への2つの可能な道を与えます。それゆえに、それは両方を追跡し、両方の結果を示します。

関連する問題