Forms et l'appel de fonctions

La syntaxe de Clojure peut sembler déroutante aux premiers abords. Pourtant, celle-ci est très simple et ne cache aucun piège.

La règle est simple. Clojure est composé de forms. Voici un exemple de form:

(operation param1 param2 ...)

Et c'est à peu près tout. On ouvre une parenthèse, on a une opération, et une suite de paramètres.

Par exemple, str prend un nombre indéfini de paramètres et va retourner la concaténation de ces paramètres. Dans un autre langage, on écrirait quelque chose comme:

str("Hello", " world", " !!!")

En clojure, on déplace juste la première parenthèse pour englober le nom de fonction:

(str "Hello" " world" " !!!")

De la même façon, println prend également un nombre indéfini de paramètres et retourne nil. D'ailleurs, j'ajouterais souvent un saut de ligne aux différents appels de println dans mes exemples, dans le but de formater l'affichage. Par exemple, le code suivant imprimera le résultat de(+ 1 2) suivi d'un saut de ligne:

(println (+ 1 2) "\n")

Evidemment, si l'élement juste après la parenthèse d'une form n'est pas une fonction, une erreur se produira, comme dans:

(1 2 3)

Cette form produira une erreur, car 1 n'est pas une fonction.

Le code Clojure consiste en forms imbriquées les unes dans les autres:

(+ 2 3 (* 10 10))

Ici, la form réalisant la multiplication est imbriquée dans celle de l'addition. Le résultat sera calculé de la manière suivante :

  • (* 10 10) est calculé, ce qui donne 100.
  • Le résultat est utilisé dans l'addition, ce qui donne (+ 2 3 100). Le résultat final est donc 105.

Précédent - Suivant -

(println "Hello world")

(println (str "Hello" " world" " !!!"))

(println (+ 2 3))

(println (+ 2 3 4))

;; equivalent to (+ 2 3 100) => 105
(println (+ 2 3 (* 10 10)))

powered by mcorbin - Available on Github