En muchos idiomas, si se escribe algo en la línea de¿Clojure tiene lógica de cortocircuito?
if (foo() || bar() || foobar()) { /* do stuff */ }
y foo() devuelve verdadero, entonces la barra() y foobar() no será evaluado.
Supongamos que tenía el siguiente código de Clojure:
(let [a (simple-function args)
b (complex-function args)
c (too-lazy-to-optimize-this-function args)]
(or a b c))
Si un resultado true, quieren b y también c ser evaluado, o serán ignorados?
Gracias!
que estoy aceptando esta porque discute Gotcha que yo desconocía. – Joel
No es un gotcha, más bien tienes que entender que todo está ansioso excepto las secuencias perezosas y las funciones que funcionan en ellas. Los 'o' cortocircuitos ya que es una macro, se expande a http://bit.ly/u8xnms. Si fuera una función, evaluaría sus argumentos. En cambio, macroexpands a un if, que es una forma especial y cortocircuitos. – gtrak