clojure si-alors-sinon?
Ce devrait être une question triviale.
je suis nouveau sur Clojure et l'écriture de cette si-alors-sinon basée sur: http://clojure.org/special_forms#Special%20Forms--%28if%20test%20then%20else?%29
Cependant, je reçois cette erreur:
java.lang.Exception: Trop d'arguments pour s' (NO_SOURCE_FILE:424)
//This code has infinite recursion bugs; but it should compile!
(defn sumdown [sum x]
(
if (foo x)
(do
(recur (+ sum x) (dec x))
)
else do(
(recur (+ sum x) (dec x))
)
)
)
source d'informationauteur Asad Iqbal
Vous devez vous connecter pour publier un commentaire.
Dans le modèle:
les deux
then
etelse
ne représentent pas des mots-clés, mais réelle expressions. Le?
indique leelse
expression est facultatif.La condition de test est évalué, et en fonction de sa valeur, la branche expression est évaluée et "retourné" comme la valeur de l'ensemble du si de l'expression.
Par exemple, ce serait de définir une valeur absolue de la fonction:
C'est le idiomatiques façon d'écrire ce code. Je recommande un éditeur de texte /IDE avec support de base pour l'édition de Lisp source (parenthèse/crochet/accolade correspondante).
La mise en œuvre correcte de votre échantillon, la suppression de tous code redondant, serait:
Parce que les deux votre 'puis' et 'd'autre' clauses sont identiques et les faire sont redondants (et dans tous les cas, les différents "faire" les formes sont des effets secondaires).
D'autres conditions sont à considérer: quand, cond, condp et cas.