这有什么区别:
X \= Y
Run Code Online (Sandbox Code Playgroud)
和这段代码:
dif(X, Y)
Run Code Online (Sandbox Code Playgroud)
我认为他们应该表现得一样,但他们没有。这是示例:
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).
Run Code Online (Sandbox Code Playgroud)
这里有一些电话:
?- 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.
Run Code Online (Sandbox Code Playgroud)
X should be the atom that occurs exactly N times in the list L. If I replace dif(G, X) with G \= X, I don't get the expected result. Can someone tell me what is the difference between these two operators? Can I use anything else except dif(G, X)?
This example works prefectly in SWI-Prolog, but doesn't work in Amzi! Prolog.
dif/2(\=)/2只要他们的论点有根据,他们都是一样的。但只有dif/2一种纯关系才能正确地处理变量,并且可以在所有方向上使用。您的示例清楚地表明您应该dif/2在这种情况下使用,因为您使用谓词不仅可以测试,还可以生成解决方案。使用最广泛的 Prolog 系统都提供dif/2.