gpt4 book ai didi

LISP 做功能行为?

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

我有这个列表代码块。

(defun test (y)
(do
((l NIL (setq y (rest y))))
((null y) 1)
(setq l (append l '(1 1)))
(print l)
)
)

输出如下图所示。出于某种原因,它将 l 设置为 y,然后附加 '(1 1)。谁能解释这种行为?

enter image description here

最佳答案

do 循环的结构是:

(do ((var init-form step-form))
(termination-form result-form)
(body))

我认为您缺少的是 step-form 在每次迭代时执行,并且此表单的 result 设置为变量。因此,在 step-form 中使用 setq 是一个标志,表明您可能没有按预期进行。

所以 (test '(2 3 4)) 的循环顺序是(省略打印)

 - Initialize l to nil
- Check (null y) which is false since y = '(2 3 4).
- (setq l (append l '(1 1))) l now has the value '(1 1)
- Execute the step form, this sets y = '(3 4) _and_ l = '(3 4)
- (null y) still false.
- (setq l (append l '(1 1))) sets l = '(3 4 1 1)
- Execute step form, sets y = '(4) _and_ l = '(4)
- (setq l (append l '(1 1))) sets l = '(4 1 1)
- Execute step form, y = () so loop terminates.

关于LISP 做功能行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21841565/

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