【问题标题】:Add a list of arbitrary lists in elementwise Scheme在 elementwise Scheme 中添加任意列表的列表
【发布时间】:2018-10-03 08:19:08
【问题描述】:

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

【问题讨论】:

  • (apply map + q)?
  • @Sylwester 哈哈。如果您将其作为答案并简要说明其工作原理,我会接受。
  • 我试图解释它是如何工作的here
  • @WillNess 感谢您的指点。投票赞成你的答案。
  • 只要有帮助。 :) 很高兴。

标签: functional-programming scheme racket


【解决方案1】:

Racket 是否有关于apply 呼叫的call-arguments-limit? 在常见的 lisp 中就是这种情况。并且可以通过这种策略规避应用:

(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 的内部列表被添加/累积元素明智的。

【讨论】:

    猜你喜欢
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 2013-11-14
    • 2020-07-20
    相关资源
    最近更新 更多