我想在循环中重新绑定一个特殊变量。通常情况下,可以使用 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*
变量,还是存在它们可能创建一个同名的新词法变量的风险?