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,

Как вы также можете видеть, существует только один список, объединяющий конечный тест и формы результатов.

Другие вопросы по тегам