5

これの違いは何ですか:

X \= Y

そして、このコード:

dif(X, Y)

同じように振る舞うべきだと思いましたが、そうではありません。次に例を示します。

n_puta(L, N, X) :- nputa(L, N, 0, X).
nputa([], N, C, _) :- N = C.
nputa([G|R], N, C, X) :- G = X, nputa(R, N, Y, X), C is Y - 1.
nputa([G|R], N, C, X) :- dif(G,X), nputa(R, N, C, X).

そして、ここにいくつかの呼び出しがあります:

?- n_puta([a,a,b,b,b], 2, X).
X = a ;
false.

?- n_puta([a,a,b,a,b,b], 3, X).
X = a ;
X = b ;
false.

X は、リスト L で正確に N 回出現するアトムでなければなりません。 に置き換えるdif(G, X)G \= X、期待した結果が得られません。これら2つの演算子の違いは何ですか? 以外のものを使用できますdif(G, X)か?

この例は、SWI-Prolog では完全に機能しますが、Amzi では機能しません! プロローグ。

4

1 に答える 1

4

dif/2そして(\=)/2彼らの議論が根拠がある限り同じです。しかしdif/2、変数でも正しく機能し、すべての方向で使用できるのは純粋な関係のみです。dif/2あなたの例は、述語をテストするだけでなく、ソリューションを生成するためにも使用するため、この場合に使用する必要があることを明確に示しています。最も広く使用されている Prolog システムはすべて、dif/2.

于 2013-05-15T08:29:11.673 に答える