Простое удаление Пролога из списка

(Это НЕ вопрос курсовой работы. Просто мое личное обучение.)

Я пытаюсь выполнить упражнение на Прологе, чтобы удалить элементы из списка . Вот мой код:

deleteall([],X,[]).
deleteall([H|T],X,Result) :- 
    H==X,
    deleteall(T,X,Result).
deleteall([H|T],X,[H|Result]) :- deleteall(T,X,Result).

Когда я его тестирую, я сначала получаю хороший ответ (т.е. со всеми удаленными крестиками). Но затем при поиске с возвратом мне предлагаются все другие варианты списка с некоторыми или ни одним из экземпляров X удален.

Почему это должно быть? Почему случаются случаи, когда H == X попадает в последний пункт?

5
задан false 9 December 2012 в 16:33
поделиться