else - clojure conditionals
Clojure-New Cond Macro? (1)
Cada paso cambia el resultado si la prueba es verdadera o la deja en paz si la prueba es falsa.
Puede escribir esto en 1.4 enhebrando funciones anónimas:
user> (-> 1 (#(if true (inc %) %))
(#(if false (* % 42) %))
(#(if (= 2 2) (* % 3) %)))
6
Aunque el cond->
no introduce nuevas funciones, en cambio genera una forma vinculante para ser más eficiente:
user> (let [g 1
g (if true (inc g) g)
g (if false (* g 42) g)
g (if (= 2 2) (* g 3) g)]
g)
6
y usa un gensym
para g
caso de que algunas de las formas usen el símbolo g
cond->>
es muy similar, simplemente coloca el símbolo en un lugar diferente. user> (let [g 1
g (if true (inc g) g)
g (if false (* 42 g) g)
g (if (= 2 2) (* 3 g) g)]
g)
6
que en este ejemplo da el mismo resultado porque *
y +
son conmutativos.
No entiendo este código de las notas de la versión de clojure 1.5 . Utiliza el cond->
macro. Por ejemplo, ¿cómo se traduciría en el código pre-1.5?
user=> (cond-> 1
true inc
false (* 42)
(= 2 2) (* 3))
6