gpt4 book ai didi

lisp - 在 Common Lisp : is the function called once, 中应用还是对列表的每个元素应用一次?

转载 作者:太空宇宙 更新时间:2023-11-03 18:50:22 25 4
gpt4 key购买 nike

我试图完全理解 apply 的工作方式,但找不到足够清楚的解释......鉴于此:

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)))))

它是否与我上面带有 apply 的函数完全等价?

最佳答案

(apply #'+ '(1 2 3 4 5))

基本相同

(+ 1 2 3 4 5)

请注意,在 Common Lisp 中,参数列表的长度通常是有限的。最大参数列表长度取决于实现方式,可以低至 50。请参阅变量 call-arguments-limit

如果您想添加更大的数字列表,请使用reduce:

(reduce #'+ '(1 2 3 4 5))

关于lisp - 在 Common Lisp : is the function called once, 中应用还是对列表的每个元素应用一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47045655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com