ce</code> is powerful, but makes our programs more complex.</li>
<li>It creates two classes of procedures: normal, and ones that take delayed arguments.</li>
<li>(This is similar to the sync vs. async divide in modern programming languages.)</li>
<li>This forces us to define separate classes of higher-order procedures, unless we make everything delayed, equivalent to normal-order evaluation (like Haskell).</li>
<li>Mutability and delayed evaluation do not mix well.</li>
</ul>
<h2 id="3.5.5" class="anchor">