Scheme中列表的总和

3

我是一名函数式编程和Scheme语言的初学者。

我找到了一个构建列表总和的方法:

(define (sum lst)
  (if (empty? lst)
      0
      (+ (car lst) (sum (cdr lst)))))

(sum (list 1 2 3))

我的问题是:是否有一种方法可以使用“+”函数来构建列表的总和,而不需要像sum这样的额外函数,就像这样:

(+ 1 2 3)
3个回答

6
您可以将参数列表应用于函数。因此,在这种情况下,您可以执行以下操作:
> (apply + (list 1 2 3))
6

2
MIT/Gnu-Scheme的参考文献表明,+可以接受任意数量的参数。我确信这是标准规范。
总之:
(define (foo . args) ....)

这里的用法是 (foo)(foo x)(foo x y), (foo x y z), .... 在 foo 中,参数将是 '(), (x), (x y)(x y z)

请参考 SICP 的练习 2.20 或 MIT/Scheme 参考手册 9.2 章节 2.1。

这意味着:

对于算术运算符+, *, -/,您不需要自己定义过程,因为它们已经被定义为可以接受任意数量的参数,包括零个和一个。 对于一些其他内置的过程也是如此。 对于您自己的过程,您可以使用 dotted-tail 符号表示参数列表。

您可以从 GNU-Pages 下载 MIT/Scheme 参考手册。我认为它有助于所有 Scheme 的实现,因为它描述了标准的扩展部分,大多数内容易于理解。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接