En Clojure, lier une valeur à un nom s'appelle une var. Les vars de premier niveau (globales) sont semblables aux constantes d'autres langages.
Les vars de premier niveau se définissent avec def :
(def fingers 10)
fingers
;;=> 10
On peut utiliser defn pour définir une fonction qui prend zéro ou plusieurs arguments. Voici une fonction qui permet d'additionner 2 nombres :
(defn add [x y]
(+ x y))
Cette fonction prend 2 arguments placés dans le vecteur [x y], suivis du corps de la fonction, qui peut contenir un nombre quelconque d'expressions. La valeur de retour est toujours le résultat de l'évaluation de la dernière expression du corps, (+ x y). Cette expression est une liste qui représente un appel de fonction. Le premier élément de la liste est la fonction +, qui est évaluée en utilisant les éléments suivants, x et y, comme arguments.
La fonction add définie ci-dessus s'appelle de la même façon :
(add 2 3)
;;=> 5
En Clojure, on ne peut utiliser les fonctions et les valeurs qu'après les avoir définies, c'est-à-dire que les formes sont toujours évaluées dans l'ordre où elles apparaissent.
En Clojure, les espaces n'ont pas d'autre rôle que la mise en forme.
Les fonctions et les vars de Clojure sont organisées en espaces de noms. Un espace de noms regroupe des fonctionnalités liées et se définit avec la macro ns :
(ns calculator)
(def pi 3.14)
(defn add [x y]
(+ x y))
Clojure prend en charge deux types de commentaires. Les commentaires sur une seule ligne sont précédés d'un ; et la forme comment sert à empêcher l'évaluation de tout ce qui se trouve entre (comment et ).
Dans cet exercice, tu vas écrire du code pour t'aider à cuisiner une lasagne exceptionnelle tirée de ton livre de cuisine préféré.
Tu as quatre tâches, toutes liées au temps passé à cuisiner la lasagne.
Définis la variable expected-time pour vérifier combien de minutes la lasagne doit rester au four. D'après le livre de cuisine, le temps de cuisson attendu est de 40 minutes :
expected-time
;;=> 40
Définis la fonction remaining-time qui prend en argument les minutes réelles pendant lesquelles la lasagne a déjà été au four et qui renvoie combien de minutes la lasagne doit encore y rester, d'après le temps de cuisson attendu en minutes de la tâche précédente.
(remaining-time 30)
;;=> 10
Définis la fonction prep-time qui prend en argument le nombre de couches que tu as ajoutées à la lasagne et qui renvoie combien de minutes tu as passées à préparer la lasagne, en supposant que chaque couche te prend 2 minutes à préparer.
(prep-time 2)
;;=> 4
Définis la fonction total-time qui prend deux arguments : le premier argument est le nombre de couches que tu as ajoutées à la lasagne, et le second est le nombre de minutes que la lasagne a passées au four. La fonction doit renvoyer le nombre total de minutes que tu as consacrées à la cuisson de la lasagne, c'est-à-dire la somme du temps de préparation en minutes et du temps, en minutes, que la lasagne a passé au four pour l'instant.
(total-time 3 20)
;;=> 26
Inscris-toi sur Exercism pour apprendre et maîtriser Clojure avec 12 concepts105 exercices, et un vrai mentorat humain, le tout gratuitement.