空变量列表按照HyperSpec,其对DO
页(重点由我提供):Common Lisp的:对于DO
做接受一个任意数迭代瓦尔的这必将 在迭代中并行并行。
然而似乎DO
不能接受一个空的变量列表,如在这里:
(do (())
((cond n) (end-result))
(cond-1..
(cond-2..))
难道DO
不能接受一个空VAR列表?是否有一个原因? (我想总是有LOOP
)。
我正在运行SBCL。
空变量列表按照HyperSpec,其对DO
页(重点由我提供):Common Lisp的:对于DO
做接受一个任意数迭代瓦尔的这必将 在迭代中并行并行。
然而似乎DO
不能接受一个空的变量列表,如在这里:
(do (())
((cond n) (end-result))
(cond-1..
(cond-2..))
难道DO
不能接受一个空VAR列表?是否有一个原因? (我想总是有LOOP
)。
我正在运行SBCL。
括号太多。这将是:
(do() (condition return-value) forms)
为DO
的语法在Common Lisp的标准定义:
do ({var | (var [init-form [step-form]])}*)
(end-test-form result-form*)
declaration*
{tag | statement}*
您可以使用Common Lisp Hyperspec查找任何符号,并找到特殊的运营商和宏的语法。你可以从语法中看到,Lisp需要一个变量形式的列表。这些可以是变量或var的列表,可选的初始化表单和可选的步骤表单。使用此语法,可以使用多个变量与DO
。
正如您所看到的,只有一个列表结合了最终测试和结果表单。
谢谢,惭愧,我从来没有想到这一点。 (()),(或(无))的条件是否有理由为无限循环?这就是为什么我认为你需要为var列表添加(())或(nil)的原因。 – Soyuz 2012-08-04 16:41:15