繁体   English   中英

计划清单的总和

[英]sum of a list in scheme

我是函数式编程和方案语言的初学者。

我找到了一种建立列表总和的方法:

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

(sum (list 1 2 3))

我的问题是:有没有办法建立一个列表的总和没有像sum这样的额外函数,只需使用“+”函数,如下所示:

(+ 1 2 3)

您可以apply参数列表apply函数。 所以在这种情况下你可以:

> (apply + (list 1 2 3))
6

MIT / Gnu-Scheme的参考文献说, +需要任意数量的参数。 我相信,这个标准。

一般来说:

(define (foo . args) ....)

使用像(foo)(foo x)(foo xy)(foo xyz) ,.... foo里面,args将是'()(x)(xy)(xyz)

参见SICP中的练习2.20或MIT / Scheme Reference 9.2 chap 2.1

这意味着:

对于算术过程+*-/您的过程不是必需的,因为它们是为任意数量的参数定义的,包括零和一。 对于其他一些内置程序也是如此。 对于您自己的程序,您可以使用点尾符号。

您可以从GNU-Pages下载MIT / Scheme Reference。 我认为它有助于Scheme的所有实现,因为描述了标准的扩展。 大多数部件都易于阅读。

Common Lisp程序员应该查看[ http://www.gigamonkeys.com/book/functions.html]

在这里你必须使用&rest而不是>。<(defun +(&rest numbers)...)

两种lisp方言都知道默认,可选和休息参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM