我试图完全理解申请的方式,但找不到足够明确的解释......鉴于此:
http://clhs.lisp.se/Body/26_glo_a.htm#apply
和此:
http://clhs.lisp.se/Body/f_apply.htm
假设我执行以下操作:
(defun sum (L)
(apply #'+ L))
然后调用以下内容:
(sum '(1 2 3 4 5))
是否执行以下操作:
(+ 1 2 3 4 5)
或以下:
(+ 1 (+ 2 (+ 3 (+ 4 5))))
换句话说,如果我写下面的函数:
(defun sum2 (L)
(if (null L)
0
(+ (first L) (sum2 (rest L)))))
它与上面的函数完全等同吗?
答案 0 :(得分:6)
(apply #'+ '(1 2 3 4 5))
与
基本相同(+ 1 2 3 4 5)
请注意,Common Lisp参数列表的长度通常有限。最大参数列表长度取决于实现,可以低至50.请参见变量call-arguments-limit
。
如果您想添加更大的数字列表,请使用reduce
:
(reduce #'+ '(1 2 3 4 5))