Tratar de hacer ejercicio 1.16 (versión iterativa de rápido-exp) en "Estructura e Interpretación de Programas Informáticos" con Clojure me ocurrió esto:Evaluación de parte de Clojure cond
(defn fast-it-exp [base exp res]
(cond (= exp 0) res
(odd? exp) fast-it-exp base (- exp 1) (* base res)
:else fast-it-exp base (/ exp 2) (* base base res)))
Ponerlo a prueba:
user=> (fast-it-exp 0 0 10)
10 ;yep
user=> (fast-it-exp 2 2 2)
1 ;no...
user=> (fast-it-exp 1 1 1)
#<user$fast_it_exp__59 [email protected]> ;huh?!
Parece que la parte "impar" de la expresión cond devuelve una función en lugar de evaluar. ¿Por qué? He intentado poner paréntesis alrededor de las expresiones después de los predicados, pero esa sintaxis parece ser incorrecta, esto es lo mejor que he podido encontrar. Estoy usando rev 1146 de Clojure.
Si desea aplicar una función, entonces probablemente tiene que tener un paréntesis de apertura a la izquierda de sí mismo. Y en su última línea no hay '(' antes 'rápido-que-exp'. Y no solo en la última línea ... –