1

我想在 Prolog 中做这样的事情:

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

这样查询两者some_commutative_property(1,2).some_commutative_property(2,1).返回true。

问题显然是第一行创建了一个无限循环。我怎样才能解决这个问题?

4

1 回答 1

5

可能有多种解决方案:

  • 将谓词一分为二:

    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 回答