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.

questionAnswers(1)

yourAnswerToTheQuestion