2012-06-07 21 views
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).真實。

問題很明顯,第一行創建了一個無限循環。我怎樣才能解決這個問題?

回答

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

+0

我想過,但我寧願不要,除非這是最後的選擇。 – Matt

+1

我已經更新了我的答案與使用表格的替代解決方案。 –

相關問題