Есть ли в Clojure логика короткого замыкания?

Во многих языках, если вы напишете что-то вроде

if (foo() || bar() || foobar()) { /* do stuff */ }

и foo () вернет true, тогда bar () и foobar () не будут оцениваться.

Предположим, у меня есть следующий код Clojure:

(let [a (simple-function args)
      b (complex-function args)
      c (too-lazy-to-optimize-this-function args)]
  (or a b c))

Если a оценивается как истина, будут ли также оцениваться b и c или они будут проигнорированы?

Спасибо!

5
задан Joel 18 November 2011 в 23:28
поделиться