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我不会得到预期的结果。有人能告诉我这两个运营商有什么区别吗?我可以使用除 以外的任何东西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 回答