2013-11-14 3 views
2

I 쌍의리스트를 가지고 쌍의 목록에서 하나의리스트를 추출 [{1, A}, {2, B}, {3, C}, {4, D}]프롤로그 :

어떻게 각 쌍의 두 번째 요소를 추출하여 별도의 목록으로 만들 수 있습니까?

그래서 : [A, B, C, D]

미안 해요, 프롤로그에 새로운 오전과 대답을 주위에 모양을 가지고 있지만 그것을 찾을 수 없습니다.

답변

3

표시 한 내용은 쌍 목록이 아닙니다. 입니다 :이 목록으로

[1-a, 2-b, 3-c, 4-d]. 

당신은 할 수 있습니다 :

?- pairs_values([1-a, 2-b, 3-c, 4-d], V). 
V = [a, b, c, d]. 

?- pairs_keys([1-a, 2-b, 3-c, 4-d], K). 
K = [1, 2, 3, 4]. 

그리고 않는 조건은 명시 적입니다 :

seconds([], []). 
seconds([_A-B|Pairs], [B|Secs]) :- 
    seconds(Pairs, Secs). 

은 물론, 주장하는 경우 :

secs([], []). 
secs([{_A, B}|Pairs], [B|Secs]) :- 
    secs(Pairs, Secs). 

하지만 스스로 결정할 수 있습니다. 모자는 명심 가장 잘 작동합니다

?- write_canonical({1,a}). 
{}(','(1,a)) 
true. 

?- write_canonical(1-a). 
-(1,a) 
true. 

좋은 자료를 프롤로그에, 다른 사람의 사이에서 :

    프롤로그에서
  • Amzi 주식 모험 (웹)
  • 이제 프롤로그 알아보기! (웹)
  • "The Art of Prolog", 스털링 및 샤피로 (책). SWI-프롤로그와
+0

죄송합니다, 그것은 실수였다. 네 말이 맞아, [1-a, 2-b, 3-c, 4-d]는 내가 원한 것이다. Btw, 참조 주셔서 감사합니다. – Hydar77

2

만, 당신은

:- use_module(library(lambda)). 
extract_second(In, Out) :- 
    maplist(\X^Y^(X = {_,Y}), In, Out). 

당신이 라이브러리 (람다)를 얻을 수 있습니다 수행 할 수 있습니다 http://www.swi-prolog.org/download/pack/lambda-1.0.0.tgz

+1

[here] (http://www.complang.tuwien.ac.at/ulrich/Prolog-inedit/ISO-Hiord#implementation) 정의는 SICStus!를 포함하여 모든 준수하는 Prolog 시스템에서 작동합니다. – false