else conditionals clojure

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