使用map对组进行排序并在Scheme中累积

时间:2010-12-10 14:49:29

标签: map scheme accumulate

我正在尝试在方案中使用“map”和“accumulating”函数将未知数量的列表分类到第一个将包含olds列表的所有第一个位置的列表中等等。

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

到此列表:

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

我写的是这样的:

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

它最后一直给我一个恼人的点......

((1 4 7 9 . 12) (2 5 8 10 . 13) (3 6 9 11 . 14)).
问题是什么?谢谢!

2 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分: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))