3
當我在GNU Prolog和SWI Prolog上運行它時,此代碼正確計算差異列表中的元素數。但是,Yap進入了一個無限循環。Prolog差異列表:代碼適用於SWI和GNU 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)在詢問此查詢時未終止?
我想你的代碼邑6.2.2和它的工作精細。 ' - - count([1,2 | A] -A,N)。 N = 2' – gusbro 2012-07-19 19:53:48
@gusbro在yap 5.11:trace:'? - 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)?' – 2012-07-19 20:49:03
嗯,我正在使用5.1.3 ,所以它可能是一個固定的bug ... – Jay 2012-07-19 23:41:35