ループ内で特殊変数を再バインドしたい。さて、通常、これはlet
.
(let ((*read-eval* nil))
(do-something-here))
しかし、loop
マクロにはこれらの素敵なwith
句があるので、そこでできるかもしれないと思いました。式(macroexpand '(loop with *read-eval* = nil))
はバインディングを alet
に展開することになるため、特に私の実装では確実に機能します。しかし、これが標準化された動作であることを示す標準には何も見つかりません。だから、私の質問はこれだと思います:
(loop with *read-eval* = nil
for i from 1 to 10
do (something-involving-the-read-function))
既存の変数を変更するために準拠する実装が必要です*read-eval*
か、それとも同じ名前の新しいレキシカル変数を作成するリスクがありますか?