gpt4 book ai didi

loops - Common Lisp dotimes 结果之谜

转载 作者:行者123 更新时间:2023-12-01 22:53:52 26 4
gpt4 key购买 nike

我明白了

(dotimes (temp-one 10 temp-one))

来自 dotimes 上的 Hyperspec 示例。运行此命令会产生答案 10。因此,第三个参数位置中的 temp-one 充当返回的“结果”,但是当 dotimes 启动时它是如何达到 10 的在 0 处并且只会到达 9?

>(dotimes (temp-one 10 temp-one) (format t "~3d " temp-one))
0 1 2 3 4 5 6 7 8 9
10

关于第三个参数,我缺少什么?

最佳答案

如果你看dotimes Hyperspec entry它声明它是一个,这意味着您可以通过调用ma​​croexpand来查看“底层”:

(macroexpand '(dotimes (i 10 i)))

SBCL:

(BLOCK NIL
(LET ((I 0))
(DECLARE (TYPE UNSIGNED-BYTE I))
(TAGBODY
(GO #:G386)
#:G385
(TAGBODY)
(PSETQ I (1+ I))
#:G386
(UNLESS (>= I 10) (GO #:G385))
(RETURN-FROM NIL (PROGN I)))))

Allegro CL:

(do ((i 0 (1+ i)))
((>= i 10) i))

在这两种情况下,迭代变量i都会增加1,然后完成最终测试(>= i 10)。如jkiiski写道:

"At the time result-form is processed, var is bound to the number of times the body was executed."

以及(return-from ..) 形式 (SBCL) 和 i 形式 (Allegro CL) 在变量增加和测试后进行评估。

关于loops - Common Lisp dotimes 结果之谜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53405744/

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