我想在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。
问题显然是第一行创建了一个无限循环。我怎么能绕过这个?
答案 0 :(得分: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).
使用some_commutative_property_aux(1,2).
和some_commutative_property_aux(3,4).
这只会假设基本事实仅为some_commutative_property(A,B)
A =< B
形式。
:- table some_commutative_property/2
也可以解决问题。