当我在GNU Prolog和SWI Prolog上运行时,此代码正确计算差异列表中的元素数。但是,Yap进入了一个无限循环。
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).
为什么Prolog解释器(如Yap)在被问到这个查询时不会终止?
答案 0 :(得分:3)
Yap 5.1.3中似乎有一个错误
较新的版本(使用Yap 6.2.2测试)可以正常工作:
?- count([1,2|A]-A,N).
N = 2