2012-05-17 3 views
0

나는 프롤로그에서 몇 가지 문제가 있어요 ... 다시 나는 세 가지 목록을 수신하는 기능을 확인해야합니다 :프롤로그의 목록에서 반복되는 요소를 제거하는 방법은 무엇입니까?

removeRepeatedElements(elementsToRemove, fullList, nonRepeatedElements) 

nonRepeatedElements을 : elementsToRemove fullList을 다음과 같이 nonRepeatedElements 기능이이어야한다 elementsToRemve 및 fullList에있는 요소가없는 목록입니다. 아무도 도와 줄 수 있습니까? 여기에 필사적 인 것. AHAH

+0

? 즉 : func ([1,2,3], [3,4,5], L). L = [1,2,4,5] ΣΔ. –

+0

아니요, func ([1,2,3,4], [2,3], L). L : [1, 4] – FriedRike

답변

1

SWI에있는 경우

% 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 기능 검사는 -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). 

당신은 어떤 다른 프롤로그에서 그 구현을 사용할 수 있습니다 ...

당신이 독특한 요소의 결합을 얻으려면
0

확인하여 설명에있어서,이 응답 될 것이다 : 요소 지정된리스트

+0

다음은 그 기능입니다 : 나는이 요소들을 가진리스트를 만들기 위해'tab' 함수를 사용했습니다 : '탭 ([(위쪽, 왼쪽), (위쪽, 중간), (위쪽, 오른쪽) (가운데, 왼쪽), (가운데, 중간), (가운데, 오른쪽), (아래쪽, 왼쪽), (아래쪽, 중간), (아래쪽, 오른쪽)])' 다음과 같이 :'탭 (AllPositions) 위의 목록에서 AllPositions라는 이름을 올바르게 사용하고 있습니까? 그리고 이걸 받았습니다. '[(상단, 중간), (상단, 우측), (가운데, 중간), (가운데, 오른쪽), (아래, 가운데), (아래, 오른쪽)] ' AllPositions 목록에서 주어진 목록을 제거하고 반복 된 요소없이 NewList를 가져와야합니다. – FriedRike

+0

위의 코드는 단일 요소 (int, char, string 등)에 대해 작동합니다. 마지막 주석에 따르면 요소 1 개 대신 요소 2 개를 처리하도록 사용자 정의해야합니다. –

관련 문제