我再次在prolog中遇到一些问题 我需要创建一个接收三个列表的函数: elementsToRemove fullList nonRepeatedElements 该功能应如下所示:
removeRepeatedElements(elementsToRemove, fullList, nonRepeatedElements)
其中nonRepeatedElements是一个列表,不包含elementsToRemve和fullList中的任何元素。 谁能请帮忙!有点绝望在这里。 AHAH
答案 0 :(得分:1)
SWI-Prolog有subtract(+ Set,+ Delete,-Result)。
以这种方式实施:
%% subtract(+Set, +Delete, -Result) is det.
%
% Delete all elements from `Set' that occur in `Delete' (a set)
% and unify the result with `Result'. Deletion is based on
% unification using memberchk/2. The complexity is |Delete|*|Set|.
%
% @see ord_subtract/3.
subtract([], _, []) :- !.
subtract([E|T], D, R) :-
memberchk(E, D), !,
subtract(T, D, R).
subtract([H|T], D, [H|R]) :-
subtract(T, D, R).
您可以在任何其他Prolog中使用该实现...
答案 1 :(得分:0)
好的,根据你的描述,这就是答案:
% base case
sto([],L,[]).
% item isn't found in the other list
sto([H|T],L,[H|T2]):-
\+member(H,L),sto(T,L,T2).
% item is present in the other list
sto([H|T],L,N):-
member(H,L),sto(T,L,N).
member(X,[X|_]).
member(X,[_|T]):-
member(X,T).
所以,sto
是主函数,member
函数检查元素是否存在于给定列表中