Common Lisp: Пустой список переменных для DO
Согласно HyperSpec, для его страницы на DO
(акцент предоставлен мной):
do принимает произвольное количество переменных итерации, которые связаны внутри итерации и идут параллельно.
И все же кажется, что DO
не может принять пустой список переменных, например здесь:
(do (())
((cond n) (end-result))
(cond-1..
(cond-2..))
Это правда, что DO
не может принять пустой список переменных? Для этого есть причина? (Я думаю, что всегда есть LOOP
).
Я бегу SBCL.
2 ответа
Слишком много скобок. Это было бы:
(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 и найти синтаксис для специальных операторов и макросов.
Как видно из синтаксиса, Лисп ожидает список переменных форм. Это может быть либо переменная, либо список var, необязательная форма инициализации и необязательная форма шага. С этим синтаксисом вы можете использовать более одной переменной с DO
,
Как вы также можете видеть, существует только один список, объединяющий конечный тест и формы результатов.