【发布时间】:2019-03-03 20:13:47
【问题描述】:
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>
【问题讨论】:
-
Prolog 的“或”不是,重复 不是“否则”。
-
所以我应该在第二个 'if' 中添加一个 H != H1 子句对吗?
-
==的反面是\==,我想,但请检查the manual。 -
!=不是 Prolog 运算符。
标签: list prolog instantiation-error