0

私はプロローグでいくつかの問題を抱えています...再び3つのリストを受け取る関数を作成する必要があります:elementsToRemove fullListnonRepeatedElements関数は次のようになります:

removeRepeatedElements(elementsToRemove, fullList, nonRepeatedElements)

ここで、nonRepeatedElementsは、elementsToRemveANDfullListに含まれる要素のないリストです。誰でも助けてくれませんか!ここは必死です。ああああ

4

2 に答える 2

1

SWI-Prologには減算(+ 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で使用できます...

于 2012-05-17T21:23:37.243 に答える
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関数は要素が指定されたリストに存在するかどうかをチェックします

于 2012-05-17T19:27:02.567 に答える