Essayer de faire de l'exercice 1,16 (version itérative de-exp rapide) dans « Structure et interprétation des programmes informatiques » avec Clojure je suis venu avec ceci:évaluation d'une partie 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)))
l'essayer:
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?!
Semble que la partie "impaire" de l'expression cond renvoie une fonction au lieu de l'évaluer. Pourquoi? J'ai essayé de mettre des parenthèses autour des expressions après les prédicats mais cela semble être une syntaxe incorrecte, c'est le meilleur que j'ai pu trouver. J'utilise la version 1146 de Clojure.
Si vous souhaitez appliquer une fonction, il a obtenu sans doute d'avoir une parenthèse d'ouverture à gauche lui-même. Et dans votre dernière ligne il n'y a pas de '(' avant 'fast-it-exp'.) Et pas seulement dans la dernière ligne ... –