Я должен проверить, содержит ли список четное число элементов без встроенных модулей.
Пример:
containsEvenNumber([a,b,c,a,a], a).
возвращает false
containsEvenNumber([a,b,c,a], a).
возвращает true
Текущее состояние:
not(A) :-
A, !,
fail.
not(_).
equal([E|_], E).
containsEvenNumber([], _).
containsEvenNumber([E|Tail], E) :-
unevenCount(Tail, E).
containsEvenNumber([Head|Tail], E) :-
not(equal([Head|Tail], E)),
evenCount(Tail, E).
evenCount([], _).
evenCount([E|Tail], E) :-
unevenCount(Tail, E).
evenCount([Head, Tail], E) :-
not(equal([Head|Tail], E)),
unevenCount(Tail, E).
unevenCount([], _) :-
fail.
unevenCount([E, Tail], E) :-
evenCount(Tail, E).
unevenCount([Head, Tail], E) :-
not(equal([Head|Tail], E)),
unevenCount(Tail, E).
Я пытаюсь переключаться между состояниями при появлении элемента.Это не работает, потому что я никогда не вхожу в состояние, когда голова не является элементом, или, скорее, сказано, я также вхожу в состояние и возвращаю false, когда голова является элементом.
Как я могу сделатьэто работает / исправить это?