2016-11-12 5 views
1

みましょう、私は次のリストを持っていると言う:つのリストのうちの2つのリストを取得します

(list '("a" 2) '("b" 1) '("c" 'end))

私は最初のリストのうちの二つのリストを取得したい、出力:

(list "a" "b" "c") and (list 2 1 'end)

どのように私はラケットでこれを行うだろうか?

私はこのような何かを思い付いた:マニュアルループ機能については

答えて

2
#lang racket 
(define l (list '("a" 2) '("b" 1) '("c" 'end))) 

(values (map first l) 
     (map second l)) 
+0

きれいです!ありがとう – Bun

1

...出力は私の空のリストを与える

(define first (mlist)) 
(define second (mlist)) 
(define (get-two-lists l) 
    (for ([i t]) 
    (mappend! first (list-ref i 0)) 
    (mappend! second (list-ref i 1)))) 

(define (f l) 
    (let loop ((l l) 
      (l1 '()) 
      (l2 '())) 
    (if (empty? l) 
     (values (reverse l1) 
       (reverse l2)) 
     (loop (rest l) 
       (cons (first (first l)) l1) 
       (cons (second (first l)) l2))))) 

テスト:

(f (list '("a" 2) '("b" 1) '("c" 'end))) 

出力:

'("a" "b" "c") 
'(2 1 'end) 
関連する問題