Diferença entre X \ = Y e dif (X, Y)
Qual é a diferença entre isso:
X \= Y
e este pedaço de código:
dif(X, Y)
Eu pensei que eles deveriam se comportar da mesma forma, mas eles não se comportam. Aqui está o exemplo:
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).
E aqui estão algumas chamadas:
?- 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 deve ser o átomo que ocorre exatamente N vezes na lista L. Se eu substituirdif(G, X)
comG \= X
, Não obtenho o resultado esperado. Alguém pode me dizer qual é a diferença entre esses dois operadores? Posso usar qualquer outra coisa, excetodif(G, X)
?
Este exemplo funciona corretamente no SWI-Prolog, mas não funciona no Amzi! Prolog.