Lisp DO 变量语法推理

Posted

技术标签:

【中文标题】Lisp DO 变量语法推理【英文标题】:Lisp DO variable syntax reasoning 【发布时间】:2010-09-19 21:02:06 【问题描述】:

在 Peter Seibel 的 Practical Common Lisp 中,他给出了这个例子:

(do ((nums nil) (i 1 (1+ i)))
    ((> i 10) (nreverse nums))
  (push i nums))

我可以看到它是如何工作的,在循环中使用 nums 但不给它一个 step-form。为什么要将 nums 放在变量定义中而不是这样做:

(let (nums) (do ((i 1 (+ i 1)))
         ((> i 10) (nreverse nums))
       (push i nums)))

我确定有充分的理由,但我还不明白。

【问题讨论】:

【参考方案1】:

因为它既方便又节省缩进。此外,累加器在概念上属于循环,那为什么不放在那里呢?

【讨论】:

以上是关于Lisp DO 变量语法推理的主要内容,如果未能解决你的问题,请参考以下文章

概率图模型(推理:变量消除)

概率图模型(推理:变量消除)

Prologish Boolos 好奇推理的计算机推理

PHP5 保护变量背后的推理

模糊控制——理论基础(4模糊推理)

机器学习 —— 概率图模型(推理:连续时间模型)