Я хочу перепрограммировать специальную переменную внутри цикла. Теперь, как правило, это выполняется с помощью let
.
(let ((*read-eval* nil))
(do-something-here))
Но так как макрос loop
имеет эти приятные предложения with
, я думал, что смогу сделать это там. Выражение (macroexpand '(loop with *read-eval* = nil))
заканчивается расширением привязки к let
, поэтому он определенно будет работать над моей реализацией. Но я не могу найти что-либо в стандарт, указывающий, что это стандартизованное поведение. Итак, я полагаю, мой вопрос таков:
(loop with *read-eval* = nil
for i from 1 to 10
do (something-involving-the-read-function))
Соответствуют ли реализации, необходимые для изменения существующей переменной *read-eval*
, или существует риск того, что они могут создать новую лексическую переменную с тем же именем?