我正在尝试在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的情况会落入最后一个子句?