我有点小问题要理解
我有这个密码:

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

这会得到同样的结果。

09-10 03:26
查看更多