예를 들어 설명하면 더 잘 설명 할 수 있습니다. 예를 들어,이 프롤로그 목록이 있습니다목록의 모든 반복 요소 중에서 가장 작은 값을 선택하십시오.
L=[(d,15),(e,16),(g,23),(e,14),(h,23),(d,19)]
을 그리고 나는이 목록 생성 할 : 요소의 모든 항목 (X, _)에서
L'=[(d,15),(g,23),(e,14),(h,23)]
이것은이, 함께 일을 남겨을 최소 Y.
예를 들어 설명하면 더 잘 설명 할 수 있습니다. 예를 들어,이 프롤로그 목록이 있습니다목록의 모든 반복 요소 중에서 가장 작은 값을 선택하십시오.
L=[(d,15),(e,16),(g,23),(e,14),(h,23),(d,19)]
을 그리고 나는이 목록 생성 할 : 요소의 모든 항목 (X, _)에서
L'=[(d,15),(g,23),(e,14),(h,23)]
이것은이, 함께 일을 남겨을 최소 Y.
정말 멋지지만 ... 다음 코드는 어떻게됩니까?
filterList([(d,15),(e,16),(g,23),(e,14),(h,23),(d,19)], L)
내가 얻을에서
getFirst((X, _), X).
isMinor(_, []).
isMinor((X1, Y1), [(X2, _) | T]) :-
X1 \= X2,
isMinor((X1, Y1), T).
isMinor((X, Y1), [(X, Y2) | T]) :-
Y1 =< Y2,
isMinor((X, Y1), T).
purgeList(_, [], []).
purgeList(X1, [(X2, Y2) | Tin], [(X2, Y2) | Tout]) :-
X1 \= X2,
purgeList(X1, Tin, Tout).
purgeList(X, [(X, _) | Tin], Tout) :-
purgeList(X, Tin, Tout).
filterList([], []).
filterList([H1 | Tin1], [H1 | Tout]) :-
isMinor(H1, Tin1),
getFirst(H1, X),
purgeList(X, Tin1, Tin2),
filterList(Tin2, Tout).
filterList([H1 | Tin], Tout) :-
\+ isMinor(H1, Tin),
filterList(Tin, Tout).
[(d,15),(g,23),(e,14),(h,23)]
당신은 또한 쓸 수 (L
이와 통합됩니다) :
select_elements(L,Lout):-
sort(L,L1),
reverse(L1,L2),
remove(L2,L3),
output_list(L,L3,Lout).
remove([],[]).
remove([H],[H]).
remove([(X,Y1),(X,Y2)|T],[(X,Y1)|T1]):-remove([(X,Y2)|T],T1).
remove([(X1,Y1),(X2,Y2)|T],[(X1,Y1)|T1]):-
dif(X1,X2),\+member((X2,_),T),
remove([(X2,Y2)|T],T1).
remove([(X1,Y1),(X2,_)|T],[(X1,Y1)|T1]):-
dif(X1,X2),member((X2,_),T),
remove(T,T1).
output_list([],_,[]).
output_list([H|T],L,[H|T1]):-member(H,L),output_list(T,L,T1).
output_list([H|T],L,T1):- \+member(H,L),output_list(T,L,T1).
예 :
?- select_elements([(d,15),(e,16),(g,23),(e,14),(h,23),(d,19)],L).
L = [ (d, 15), (g, 23), (e, 14), (h, 23)] ;
false.
당신은 예를 우아하지
?- my_select([(d,15),(e,16),(g,23),(e,14),(h,23),(d,19)], Out).
Out = [(d,15),(e,14),(g,23),(h,23)] ;
false.
를 들어
시도 할 수 있습니다,하지만 그건 내가 원한과 작동거야. 감사! – thomas12