Różnica między X = Y i dif (X, Y)

Jaka jest różnica między tym:

X \= Y

i ten fragment kodu:

dif(X, Y)

Myślałem, że powinni zachowywać się tak samo, ale tak nie jest. Oto przykład:

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).

Oto kilka połączeń:

?- 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 powinien być atomem, który występuje dokładnie N razy na liście L. Jeśli zastąpiędif(G, X) zG \= X, Nie mam oczekiwanego rezultatu. Czy ktoś może mi powiedzieć, jaka jest różnica między tymi dwoma operatorami? Czy mogę używać czegokolwiek innego z wyjątkiemdif(G, X)?

Ten przykład działa doskonale w SWI-Prolog, ale nie działa w Amzi! Prolog.

questionAnswers(1)

yourAnswerToTheQuestion