J'essaie d'apprendre à programmer avec le livre Clojure for the Brave and True (CFTBAT). A la fin du cours intensif, l'auteur nous fait écrire un petit programme pour illustrer le bouclage de Clojure. Pour expliquer la partie en boucle et récursive du programme, here, l'auteur écrit un exemple plus petit en utilisant loop
et montre ensuite qu'il est possible de remplacer loop
par une définition de fonction normale.Récursion avec Clojure et Clojure pour les Brave et Vrai
C'est cet exemple de définition de fonction normale que je ne comprends pas. Voici le code:
(defn recursive-printer
([]
(recursive-printer 0))
([iteration]
(println iteration)
(if (> iteration 3)
(println "Bye!")
(recursive-printer (inc iteration)))))
(recursive-printer)
Je ne comprends pas le code parce que je ne vois pas où sont les arguments de la fonction recursive-printer
. Dans Clojure, les arguments d'une fonction sont supposés être entre parenthèses et le corps entre parenthèses. Ainsi, dans cet exemple, les arguments seraient un argument vide []
et iteration
. Mais alors pourquoi sont-ils mis entre parenthèses aussi?
Et qu'est-ce que (recursive-printer 0)
Est-ce un appel de fonction, où la fonction s'appelle elle-même?
Si quelqu'un pouvait m'expliquer comment ce morceau de code fonctionne, ce serait très apprécié.
Il existe deux listes d'arguments différentes. Un '[]' - avec le code pour gérer le cas où il est appelé sans arguments - et un '[itération]', pour gérer quand il est appelé avec un argument. –
BTW, dans la mesure où ce livre est disponible en ligne, il peut ne pas blesser d'avoir un lien - la version web n'est pas orientée page par page, donc "page 63" n'aide pas les gens qui l'utilisent beaucoup . –
Voir le chapitre 3 sur "Arity Overloading": https://www.braveclojure.com/do-things/ –