count([H|T], X, N):- count(T, X, N1), X=:=H, N is N1 + 1.
здесь вы заявляете, что N должно быть N1 + 1, если X является H; однако вы не определяете, что должно произойти, если X не является H (в основном отсутствует предложение else)
это должно работать:
count([H|T], X, N):-
count(T, X, N1),
(X=:=H->
N is N1 + 1
; N is N1).
другой способ будет:
count([H|T], X, N):- count(T, X, N1), X=:=H, N is N1 + 1.
count([H|T], X, N):- X=\=H, count(T, X, N1), N is N1.
но это неэффективно, так как count (T, X, N1) будет вызван дважды, если X не H. Мы можем это исправить, выполнив проверку в начале предложения:
count([H|T], H, N):- count(T, X, N1), N is N1 + 1.
count([H|T], X, N):- count(T, X, N1), N is N1.
или просто:
count ([H | T], H, N): - считать (T, X, N1), N равно N1 + 1.
count([H|T], X, N1):- X=\=H, count(T, X, N1).