我有点小问题要理解
我有这个密码:
(defun iota-b (n)
(do ((x 0 (+1 x))
(u '() (cons x u)))
((> x n) (nreverse u))))
(物联网-b 5)
(0 1 2 3 4 5)
文档中的“do”基本模板是:
(do (variable-definitions*)
(end-test-form result-form*)
statement*)
我真的不明白我的身体在我的功能中处于什么位置
对我来说是
(u'((cons x u)))
显然不是,为什么我们在变量定义中加上(u’)(cons x u))?
最佳答案
您有表单的变量定义var init [step]
((x 0 (+1 x))
(u '() (cons x u)))
这会在每次迭代中增加
x
,并用(cons x u)
列表构建为u
。最后的考验
(> x n)
结果表
(nreverse u)
将列表
(5 4 3 2 1 0)
反转为给定结果。然后你的身体就空了。
当然可以将do循环修改为
(do ((x 0 (+1 x))
(u '()))
((> x n) (nreverse u))
(setq u (cons x u)))
这会得到同样的结果。