Prolog删除所有重复功能

时间:2014-12-07 21:37:28

标签: syntax prolog

我有一个应该在理论上运作的代码,但事实并非如此。我有删除功能,删除所有出现的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).

有人可以解释问题是什么吗?

1 个答案:

答案 0 :(得分:1)

您正在将rev视为一个函数,期望它“返回”已移除的H列表。实际上,它会将A绑定到这样的列表,因此这应该是remvdub的第一个参数。那就是:

remvdub([H|T],[H|X]) :- remv(H,T,A), remvdub(A,X).