2012-08-04 49 views
0

空变量列表按照HyperSpec,其对DO页(重点由我提供):Common Lisp的:对于DO

做接受一个任意数迭代瓦尔的这必将 在迭代中并行并行。

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

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

难道DO不能接受一个空VAR列表?是否有一个原因? (我想总是有LOOP)。

我正在运行SBCL。

回答

5

括号太多。这将是:

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

谢谢,惭愧,我从来没有想到这一点。 (()),(或(无))的条件是否有理由为无限循环?这就是为什么我认为你需要为var列表添加(())或(nil)的原因。 – Soyuz 2012-08-04 16:41:15

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

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