1

私はPrologでこのようなことをしたいです:

some_commutative_property(X,Y) :- some_commutative_property(Y,X).
some_commutative_property(1,2).
some_commutative_property(3,4).

両方をクエリしてtrueを返すようsome_commutative_property(1,2).some_commutative_property(2,1).します。

問題は明らかに、最初の行が無限ループを作成することです。どうすればこれを回避できますか?

4

1 に答える 1

5

複数の解決策があるかもしれません:

  • 述語を 2 つに分割します。

    some_commutative_property(X,Y) :- some_commutative_property_aux(X,Y). some_commutative_property(X,Y) :- some_commutative_property_aux(Y,X).

some_commutative_property_aux(1,2)._some_commutative_property_aux(3,4).

  • 順序を強制します。

    some_commutative_property(X,Y) :- X>Y, some_commutative_property(Y,X).

with some_commutative_property_aux(1,2).andこれは、基本的な事実がwithsome_commutative_property_aux(3,4).の形式のみであるという仮定の下でのみ機能します。some_commutative_property(A,B)A =< B

于 2012-06-07T18:44:32.477 に答える