count([], 0).
count([H,H1|T], N) :- (H == H1,
count([H1|T], N));
(N1 is N-1,
count([H1|T], N1)).
我的直觉是,第一个“if”只是移动到“下一个头”,如果相邻元素相同,N 不会递减,但是如果它们不同,第二个会递减。然后,当列表清空时,它是真的。
也许我稍微误解了 Prolog 中的回溯,但这不应该产生正确的答案吗?
例如,我收到此错误:
?- count([3,4,5,6],C).
ERROR: Arguments are not sufficiently instantiated
ERROR: In:
ERROR: [8] count([3,4|...],_972)
ERROR: [7] <user>