0

根据 HyperSpec,其页面DO(重点由我提供):

do 接受任意数量的迭代变量,这些变量绑定在迭代内并并行执行。

然而似乎DO不能接受一个空的变量列表,比如这里:

(do (())
    ((cond n) (end-result))
  (cond-1..
  (cond-2..))

DO不能接受空的 var 列表是真的吗?是否有一个原因?(我想总是有LOOP)。

我正在运行 SBCL。

4

2 回答 2

5

括号太多。这将是:

(do () (condition return-value) forms)
于 2012-08-04T07:11:31.917 回答
3

的语法DO在 Common Lisp 标准中定义:

do ({var | (var [init-form [step-form]])}*)
  (end-test-form result-form*)
  declaration*
 {tag | statement}*

您可以使用Common Lisp Hyperspec查找任何符号并找到特殊运算符和宏的语法。

从语法中可以看出,Lisp 需要一个变量形式的列表。这些可以是变量或 var 列表、可选的初始化形式和可选的步骤形式。使用此语法,您可以将多个变量与DO.

您还可以看到,只有一个列表结合了最终测试和结果表单。

于 2012-08-04T20:21:07.067 回答