(这不是课程作业问题。只是我自己的个人学习。)
我正在尝试在 Prolog 中进行练习以从列表中删除元素。这是我的代码:
deleteall([],X,[]).
deleteall([H|T],X,Result) :-
H==X,
deleteall(T,X,Result).
deleteall([H|T],X,[H|Result]) :- deleteall(T,X,Result).
当我测试它时,我首先得到了一个很好的答案(即删除了所有的 X。)但随后回溯为我提供了列表的所有其他变体,其中一些或没有删除 X 的实例。
为什么会这样?为什么 H==X 的情况会落入最后一个子句?