[英]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.