根据 HyperSpec,其页面DO
(重点由我提供):
do 接受任意数量的迭代变量,这些变量绑定在迭代内并并行执行。
然而似乎DO
不能接受一个空的变量列表,比如这里:
(do (())
((cond n) (end-result))
(cond-1..
(cond-2..))
DO
不能接受空的 var 列表是真的吗?是否有一个原因?(我想总是有LOOP
)。
我正在运行 SBCL。
根据 HyperSpec,其页面DO
(重点由我提供):
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
.
您还可以看到,只有一个列表结合了最终测试和结果表单。