0

私がそのような目標を持っているとしましょう:

times(0,_,0).                          % zero times X is zero
times(X,Y,Z) :- times(Y,X,Z) ,!.       % X * Y = Y * X

私が尋ねようとすると:

?- times(0,1,X).

私は二重の答えを得ます:

X = 0 ;
X = 0.

おそらく、最初の答えはとから推測され、fact2番目の答えはから推測されるためruleです。
質問-2つではなく1つの答えだけを与えるようにプロローグを作成する方法は?

4

1 に答える 1

2

最初の選択肢を「確認」するためにカットを追加します。

times(0,_,0) :- !. 

または2番目から0を禁止します:

times(X,Y,Z) :- X \= 0, times(Y,X,Z).

カットを削除しましたが、ルールが他にある場合はそのままにしておきます。しかし、「反射性」のルールは、過度の再帰を伴う問題を引き起こすと思います。

于 2012-08-17T08:43:28.887 に答える