在elementwise Scheme中添加任意列表的列表

时间:2018-10-03 08:19:09

标签: functional-programming scheme racket

在Scheme中,我们可以使用l1,l2添加两个列表(map + l1 l2)。现在假设我们有一个n个列表,每个列表的长度为m。例如,考虑(define q '((0 1 0) (1 0 0) (0 0 1)))。使用applymap应该是一个衬板,以元素方式添加此列表的元素,并获得(1,1,1)。我认为应该看起来像这样: (map + (apply __ q)) 请帮助我填写空白(或建议替代方法)。

1 个答案:

答案 0 :(得分:1)

Racket是否有一个与call-arguments-limit通话有关的apply? 通常情况就是这样。可以通过这种策略来规避这一点:

(define q '((0 1 0) (1 0 0) (0 0 1)))

(define (add l1 l2) (map + l1 l2)) ; adds two lists of any length element wise

(foldr add '(0 0 0) q) 
; reduce over list of list q by element-wise addition of the inner lists

起始值为'(0 0 0)q的内部列表将按元素添加/累积。