prolog中的递归列表谓词

时间:2017-09-10 12:08:11

标签: list recursion prolog

我的作业有困难,我必须写2个谓词:

remove_all/3从列表中删除给定元素的所有实例,并输出没有给定变量的列表,例如:

remove_all(a, [b,a,c,a,d], X)  

给出

X = [b,c,d])

remove_list/3从另一个列表中删除给定列表的所有元素并输出结果列表,例如:

remove_list([a,b], [b,a,c,a,d], X)  

给出

X=[c,d].  

这就是我所拥有的:

remove_all(Rema,[],[]).
remove_all(Rema,[Rema|X],Res) :- 
    remove_all(Rema,X,Res).
remove_all(Rema,[L|P],Res) :- 
    remove_all(Rema,P,NR), Res=[L|NR].

remove_list([],ListB, ListRes).
remove_list([H|Taila],ListB,ListRes) :- 
    member(H,ListB), 
    remove_all(H,ListB,ListRes),
    remove_list(Taila,ListRes,ListRes) .

remove_list([S|Tailb],ListB,ListRes) :- 
    remove_list(Tailb, ListB, ListRes).

现在,我的remove_all工作正常,但是当我在remove_list谓词中使用它时,它将只删除列表中第一个元素的所有实例,这些实例指定哪个元素是被删除,例如:

?- remove_list([1,2],[1,2,3,2,1],F).
F = [2, 3, 2] 

它只删除了1。

任何人都知道该怎么办?

0 个答案:

没有答案