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