title: Common Lisp Binding in Loop Macro
body: <p>I want to rebind a special variable inside of a loop. Now, normally, this is accomplished using a <code>let</code>.</p>
  
  <pre><code>(let ((*read-eval* nil))
    (do-something-here))
  </code></pre>
  
  <p>But since the <code>loop</code> macro has these nice <code>with</code> clauses, I thought I might be able to do so in there. The expression <code>(macroexpand '(loop with *read-eval* = nil))</code> ends up expanding the binding to a <code>let</code>, so it will definitely work on my implementation specifically. But I can't find anything in <a href="http://clhs.lisp.se/Body/06_a.htm" rel="noreferrer" title="Common Lisp HyperSpec">the standard</a> indicating that this is standardized behavior. So, I suppose, my question is this:</p>
  
  <pre><code>(loop with *read-eval* = nil
        for i from 1 to 10
        do (something-involving-the-read-function))
  </code></pre>
  
  <p>Are conforming implementations required to modify the existing <code>*read-eval*</code> variable, or is there a risk that they might create a new lexical variable of the same name?</p>