2010-12-10 5 views
0

Ich versuche, "Karte" und "Akkumulieren" -Funktionen in Schema zum Sortieren unbekannter Menge an Auflistung in eine Liste, die die ersten alle Orte der olds Listen und haben bald.Sortieren von Gruppen mit Karte und akkumulieren in Scheme

(1 2 3..) (4 5 6..) (7 8 9..)... 

zu dieser Liste:

(1 4 7) (2 5 8) (3 6 9). 

Ich schreibe dies:

(accumulate (lambda (x y) (if (null? y) x (map cons x y))) null '((1 2 3) (4 5 6) (7 8 9) (9 10 11) (12 13 14))) 

und es hält mir den lästigen Punkt am Ende zu geben ...

((1 4 7 9 . 12) (2 5 8 10 . 13) (3 6 9 11 . 14)). 

Was scheint das Problem zu sein? Vielen Dank!

+0

Welches Schema und waht ist die Definition oder zumindest die Dokumentation von accumulate? –

+0

Die Version ist 209 –

Antwort

0

Versuchen Sie folgendes:

(if (null? y) 
    (map list x) 
    (map cons x y)) 
+0

Das ist es! Vielen Dank! –

0
(define (accumulate x . rest) 
    (append (list x) rest)) 

> (map accumulate '(1 2 3) '(4 5 6) '(7 8 9)) 
=> ((1 4 7) (2 5 8) (3 6 9)) 
> (map accumulate '(1 2 3 4) '(5 6 7 8) '(9 10 11 12) '(13 14 15 16)) 
=> ((1 5 9 13) (2 6 10 14) (3 7 11 15) (4 8 12 16)) 
+0

Vielen Dank für den Kommentar! –

Verwandte Themen