5

この小さなプログラムを考えてみましょう:

married(bill, hillary).
spouse(X, Y) :- married(X, Y); married(Y, X).
likes(X, Y) :- spouse(X, Y).

今、私は目標を評価したい

?- likes(X, Y).
X = bill
Y = hillary ?;
X = hillary
Y = bill
yes 

バックトラック時にこの対称関係の繰り返しを防ぎ、目標の対称性を維持する方法はあり?- likes(hillary, X).ますか?

4

2 に答える 2

2

@SergeyDymchenko がコメントで観察したように、リレーショナル プロパティを保持し、希望を満たすように述語を定義する方法はありません。

とにかくこれが欲しい理由は私には明らかではありません。多分あなたは出力を減らしたいですか?次に、別のクエリを実行します。

?- spouse(X,Y), X @=< Y.
于 2014-04-26T19:52:35.760 に答える