title: Does Clojure have short-circuit logic?
body: <p>In many languages, if you write something along the lines of </p>
  
  <pre><code>if (foo() || bar() || foobar()) { /* do stuff */ }
  </code></pre>
  
  <p>and foo() returns true, then bar() and foobar() will not be evaluated.</p>
  
  <p>Suppose I had the following Clojure code:</p>
  
  <pre><code>(let [a (simple-function args)
        b (complex-function args)
        c (too-lazy-to-optimize-this-function args)]
    (or a b c))
  </code></pre>
  
  <p>If a evaluates to true, will b and c also be evaluated, or will they be ignored?</p>
  
  <p>Thanks!</p>