This code correctly calculates the number of elements in a difference list when I run it on GNU Prolog and SWI Prolog. However, Yap enters an infinite loop.
count(X-X1,0) :- unify_with_occurs_check(X,X1), !.
count([H|T]-T1,N) :- count(T-T1,M), N is M+1.
?- count([1,2|A]-A,N).
Why would a Prolog interpreter (like Yap) not terminate when asked this query?
?- count([1,2|A]-A,N). N = 2
- gusbro?- count([1,2|A]-A,N). (1) call:count([1,2|_1059]-_1059,_1063) ? (1) redo:count([1,2,1,2,1,2,1,2,1,2,...]-_1059,_1063) ? (2) call:count([2,1,2,1,2,1,2,1,2,1,...]-_1059,_1147) ? (2) redo:count([2,1,2,1,2,1,2,1,2,1,...]-_1059,_1147) ?
- Thanos Tintinidis