forcément dire qu’il est nécessairement plus simple de programmer en Scheme
que dans d’autres langages pour autant).
En programmation fonctionnelle, j’ai l’impression que la fonction factorielle a
tendance à remplacer le classique « Hello World », donc voici comment elle
s’implémente en Scheme :
(define (factorial n)
(if (=n0)
1
(* n (factorial (-n1)))))
(factorial 6)
;; renvoie 720
Les trois points qui me semblent caractériser la programmation dans les langages
dérivés de Lisp (en dehors des parenthèses), c’est :
•l’utilisation beaucoup plus fréquente de la récursion ;
•
l’utilisation extensive et beaucoup plus souple de fonctions : une fonction
peut être passée en paramètre, ou à l’inverse être créée à la volée par une
autre fonction ;
•
l’utilisation de listes, généralement manipulées en utilisant les primitives
cons
(ajoute un élément au début d’une liste),
car
(renvoie le premier
élément d’une liste), et cdr (renvoie la liste, moins le premier élément).
Il me semble que les deux premiers points s’appliquent aussi à tout le reste de la
programmation fonctionnelle, et que le dernier est un peu plus spécifique à la
famille des Lisp.
Venons-en maintenant à Clojure. À chaque fois que j’ai essayé de m’initier au
langage Scheme, je n’ai pas été spécialement effrayée par les parenthèses (un
éditeur correct peut faire beaucoup pour vous), et j’ai trouvé que ce langage
était génial. Je trouvais l’approche fonctionnelle attirante, et qu’il y avait une
simplicité élégante dans ce langage. Malheureusement, j’avais l’impression que les
exemples que je voyais consistaient surtout à des fonctions mathématiques (par
exemple la classique suite de Fibonacci) ou à des exemples qui me paraissaient
bien choisis pour montrer l’intérêt de la programmation fonctionnelle ; j’avais
plus de mal à imaginer comment utiliser ce langage pour les projets que j’aurais
pu avoir envie de coder, et j’avais l’impression qu’il était très difficile d’utiliser des
bibliothèques d’usage courant (à ce sujet, Chicken Scheme me paraît néanmoins
intéressant car il compile du code Scheme en C et permet d’utiliser des fonctions
utilisées de bibliothèques C ; mais je ne m’en suis jamais servie personnellement).
Clojure, de son côté, a l’avantage de tourner sur la Java Virtual Machine. En
dehors du bien ou du mal que l’on peut penser de Java, cela a l’intérêt important
2