count([], 0).
count([H,H1|T], N) :- (H == H1,
count([H1|T], N));
(N1 is N-1,
count([H1|T], N1)).
Моя интуиция заключается в том, что первое «если» просто перемещается к «следующей голове», и N не уменьшается, если соседний элемент одинаков, но второе уменьшается, если они разные.Затем, когда список опустошается, это правда.
Возможно, я немного неправильно понимаю, что такое откат в Прологе, но разве это не должно дать правильный ответ?
Я получаю эту ошибку, например:
?- count([3,4,5,6],C).
ERROR: Arguments are not sufficiently instantiated
ERROR: In:
ERROR: [8] count([3,4|...],_972)
ERROR: [7] <user>