estoy enseñando a mí mismo Clojure.if-else ramificación en clojure
En un lenguaje no-FP, que podría fácilmente lo suficiente contra escritura si anidado de, y si no puse específicamente una persona, entonces el control se acaba de fluir fuera del bloque if. Por ejemplo:
Thing myfunc()
{
if(cond1)
{
if(cond2)
return something;
}
return somethingelse;
}
Sin embargo, en Clojure, no hay ninguna instrucción de retorno (que yo sepa), por lo que si escribo:
(defn myfunc []
(if (cond1)
(if (cond2) something))
somethingelse)
entonces no hay "vuelta" en "algo". Parece que solo digo, vale, aquí tenemos un valor, ahora sigamos ejecutando. La solución obvia sería combinar las condiciones, es decir .:
(if (and (cond1) (cond2))
something
somethingelse)
pero ahora se pone difícil de manejar/fea para condiciones de gran tamaño. Además, tomaría una trampa adicional agregar una declaración a la parte "else" de cond1. ¿Hay algún tipo de solución elegante para esto?
no veo cómo se conseguiría "difícil de manejar". ¿Puedes presentar algún ejemplo? – Svante
El problema en el que estaba trabajando consistía en verificar si dos números tenían 3 dígitos. Me pareció muy feo escribir (if (y (= 3 (count (str num1))) (= 3 (count (str num2)))) something) – Kricket
¡Parece que necesitas una función! '(defn tres? [num] (= 3 (count (str num))))' Entonces todo lo que necesitas es '(if (y (three? num1) (three? num2)) something)' – Jeremy