我的作业有困难,我必须写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。
任何人都知道该怎么办?