使用Scheme的列表中的数字总和

时间:2011-10-12 20:42:16

标签: scheme sum racket

我想在不使用递归的情况下对列表中的数字求和。我知道你可以总结这样的数字列表

  

(+ num1 num2 ... numN)

但如果你有一个等于'(num1 num2 ... numN)的列表L怎么办? 有没有办法让+把这个列表中的数字作为参数。我需要在没有递归或辅助函数的情况下执行此操作。

2 个答案:

答案 0 :(得分:11)

当然,只需使用apply

(apply + '(1 2 3 4 5 6))   ; same as (+ 1 2 3 4 5 6)
(apply + 1 2 3 '(4 5 6))   ; ditto
(apply + 1 2 3 4 5 '(6))   ; ditto
(apply + 1 2 3 4 5 6 '())  ; ditto

答案 1 :(得分:3)

对于你似乎要问的问题的一般答案 - 如何列出并使用它作为参数 - 是apply,正如Chris Jester-Young所回答的那样。

但是,对于这个特定问题,可能还有其他一些考虑因素。您可能想要对任意大小的列表求和。但是,实现通常会对可以调用函数的参数数量进行一些限制。更可靠的解决方案可能是使用某种fold函数(各种实现具有不同的折叠函数)来折叠+列表。