根据HyperSpec,DO
的页面(由我提供的重点):
接受绑定的 任意 次数的迭代变量 在迭代中并行并行。
但似乎DO
无法接受空变量列表,例如:
(do (())
((cond n) (end-result))
(cond-1..
(cond-2..))
DO
是否无法接受空的var列表?是否有一个原因? (我想总有LOOP
)。
我正在运行SBCL。
答案 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
一起使用。
正如您所看到的,只有一个列表结合了结束测试和结果表单。