Примечание: этот ответ представляет решение, которое является рекурсивным, но не хвостовой рекурсией .Для хвостового рекурсивного решения вы должны использовать аккумулятор, как показано в других ответах на этот вопрос.
Как и в случае любой рекурсивной процедуры, вы должны добавить надлежащий базовый случай.В этом случае это должно быть предложение с пустым списком, которое возвращает унифицированное 0 с количеством необработанных переменных:
count([], 0).
Проверьте написанное вами предложение.Он принимает в качестве входных данных список из двух элементов вместо списка, представленного в виде элемента Head и хвостового списка, и он действительно ничего не делает с N:
count([Head|Tail], M):-
var(Head),
!,
count(Tail, N),
M is N+1.
И, наконец, вам также следует добавить предложениеразберитесь со случаем, когда первый элемент списка не является неопознанной переменной:
count([_|Tail], N):- count(Tail, N).