Common Lisp:DO的空变量列表

时间:2012-08-04 07:02:15

标签: loops lisp common-lisp sbcl

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

  

接受绑定的 任意 次数的迭代变量   在迭代中并行并行。

但似乎DO无法接受空变量列表,例如:

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

DO是否无法接受空的var列表?是否有一个原因? (我想总有LOOP)。

我正在运行SBCL。

2 个答案:

答案 0 :(得分:5)

括号太多。它将是:

(do () (condition return-value) forms)

答案 1 :(得分: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一起使用。

正如您所看到的,只有一个列表结合了结束测试和结果表单。