我有一个应该在理论上运作的代码,但事实并非如此。我有删除功能,删除所有出现的a并返回新列表。我在每个步骤调用它并传递新列表,同时添加头部。这是我的代码,返回false。
remv(a, [], []).
remv(a, [H|T], X) :- H=a, remv(a, T, X).
remv(a, [H|T],[H|X]):- remv(a, T, X).
%4
remvdub([],[]).
remvdub([H|T],[H|X]) :- remvdub(remv(H,T,A),X).
有人可以解释问题是什么吗?
答案 0 :(得分:1)
您正在将rev
视为一个函数,期望它“返回”已移除的H
列表。实际上,它会将A
绑定到这样的列表,因此这应该是remvdub
的第一个参数。那就是:
remvdub([H|T],[H|X]) :- remv(H,T,A), remvdub(A,X).