Векторное добавление списков - PullRequest
4 голосов
/ 15 марта 2010

Если бы у меня было N списков длиной M, как я мог бы написать красивую чистую функцию, возвращающую один список длины M, где каждый элемент является суммой соответствующих элементов в N списках?

(начинай учить шутки - иди спокойно!)

Ответы [ 3 ]

9 голосов
/ 15 марта 2010

Это задание для функций map и apply. Вот способ сделать это с EDIT , предложенным Натаном Сандерсом:

(define (add-lists . more)
  (apply map + more))
2 голосов
/ 19 марта 2010

Просто это работает в схеме MIT.

 (map + '(1 2 3) '(4 5 6) '(7 8 9))
;Value 28: (12 15 18)
2 голосов
/ 18 марта 2010

Для синтаксиса, более похожего на matlab:

(define (piecewise func)
  (lambda more
    (apply map func more)))
(define pw piecewise)

((pw +) '(1 2 3 4 5) '(6 7 8 9 0))
((pw -) '(1 2 3 4 5) '(6 7 8 9 0))
((pw *) '(1 2 3 4 5) '(6 7 8 9 0))
((pw /) '(1 2 3 4 5) '(6 7 8 9 0.1))

выходы:

(7 9 11 13 5)
(-5 -5 -5 -5 5)
(6 14 24 36 0)
(1/6 2/7 3/8 4/9 50.0)
...