2014-07-22 3 views
1

에 하나 개의 목록으로 목록의 목록을 결합 : 어떻게 설정할 수 있습니다 L ((a 1) (b 2) (c 3)) ((d 4) (e 5) (f 6))
을 그 ((a 1) (b 2) (c 3) (d 4) (e 5) (f 6))그래서 예를 들어 나는이 목록이 계획

에 나는 하나 개의 목록을 만들 필요가 두 목록을 포함하는 목록 포함 목록.

내가 알고 내가 차 LI는 전반부 ((a 1) (b 2) (c 3))과를 얻을 수 있을지 cdrL 나는 두 개의 "결합"을 위해 가 (((d 4) (e 5) (f 6)))하지만 난 형태 ((a 1) (b 2) (c 3) (d 4) (e 5) (f 6))

답변

3

로를 설정하는 방법을 알아낼 질수 뒤쪽 절반을받을 경우 목록 (내용에 상관없이)은 append을 사용하십시오. 그리고리스트의 제 1 및 제 2 요소를 사용하여 액세스하는 (car x)(cadr x) - (car (cdr x)) 속기가된다. 예를 들어 하위 목록의 임의의 수와 함께 작동하는 더 일반적인 솔루션을

(define lst '(((a 1) (b 2) (c 3)) ((d 4) (e 5) (f 6)))) 

(append (car lst) (cadr lst)) 
=> '((a 1) (b 2) (c 3) (d 4) (e 5) (f 6)) 

, apply를 사용하여 @ uselpa의 훌륭한 대답을 참조하십시오. 당신이 라켓을 사용하는 경우 또는 append*는 여러 하위 목록에 대한 작동합니다

(define lst '(((a 1) (b 2) (c 3)) ((d 4) (e 5) (f 6)) ((g 7) (h 8) (i 9)))) 

(append* lst) 
=> '((a 1) (b 2) (c 3) (d 4) (e 5) (f 6) (g 7) (h 8) (i 9)) 
+1

빠른 답장을 보내 주셔서 감사합니다. 나는 그것이 나를 가능하게 할 때 대답으로 표시 할 것이다. – Crowlands

+1

@Crowlands 훌륭한! 그것은 내 기쁨이었습니다 :) –

2

이 하위 목록의 수를, (apply append ...) 작품을 오스카의 대답을 보완하기 위해 :

(define L '(((a 1) (b 2) (c 3)) 
      ((d 4) (e 5) (f 6)))) 
(apply append L) 
=> '((a 1) (b 2) (c 3) (d 4) (e 5) (f 6)) 

(define G '(((a 1) (b 2) (c 3)) 
      ((d 4) (e 5) (f 6)) 
      ((g 7) (h 8) (i 9)))) 
(apply append G) 
=> '((a 1) (b 2) (c 3) (d 4) (e 5) (f 6) (g 7) (h 8) (i 9)) 
+0

그래서'apply'는 첫 번째 수준의 목록을 결합한 것입니까? – Crowlands

+1

'apply append'는 않습니다. '(append (L1 L2 L3 ...) 적용)'은'(L1 L2 L3 ... 추가) '와 같기 때문에'apply'는 괄호의 한 수준을 제거합니다. 다른 절차에서도 작동합니다. – uselpa

+1

@Crowlands 당신이 추가', 라켓을 사용하는 일이있는 경우 또는 * '여러 하위 목록을 위해 작동합니다, 나는 그런 빠른 응답을 기대하지 않은 하하) –