2016-11-12 36 views
1

讓說我有以下列表:獲得兩個列表出來一個清單

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

我想兩個列表出來的第一個列表,輸出:

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

我如何在Racket中做到這一點?

我想出了這樣的事情:

(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)))) 

輸出給我空單..

回答

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

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

這很好!謝謝 – Bun

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)