Vous souhaitez rechercher un équilibre entre simplicité et propreté, des fonctionnalités attrayantes et une plateforme qui vous permettra d'écrire des logiciels intéressants et utiles (pour vous-même) ainsi que de servir d'outil d'apprentissage. (Ce dernier vous permettra de continuer et d'apprendre beaucoup plus longtemps.) Voici quelques possibilités:
Schème. Probablement le plus propre de tous les dialectes. C'est sans aucun doute la raison pour laquelle The Little Schemer a été traduit de LISP en Scheme. La cinquième spécification standard de Scheme, R5RS , est une merveilleuse éducation en soi; c'est peut-être le plus beau langage et la spécification de bibliothèque que j'ai jamais lu, ainsi que le plus court qui soit raisonnablement complet. La plate-forme PLT Scheme (maintenant Racket) comprend un interpréteur et un compilateur assez décents, est bonne pour les scripts et possède également des outils visuels qui la rendent excellente pour l'apprentissage.
Common Lisp. Probablement la variante la plus portable et la plus complète, c'est probablement ce que vous voulez si vous voulez écrire des choses telles que des logiciels commerciaux. Le standard définit des bibliothèques étendues, et beaucoup d'autres sont disponibles au-delà, il a CLOS , qui vous en apprendra probablement plus sur OO que n'importe quel langage OO, et certains des compilateurs sont très bons. Les inconvénients incluent certaines verrues que Scheme n'a pas (comme avoir un espace de noms séparé pour les variables qui font référence à des fonctions), n'étant pas aussi propre et simple (comme c'est le cas avec tout ce qui a dû avoir les extensions et rendre les compromis nécessaires pour les grandes applications dans le monde réel), ne disposant pas de macros hygiéniques et mettant beaucoup moins l'accent sur la récursivité que Scheme.
Clojure.Cela fonctionne sur la JVM, ce qui peut lui donner une longueur d'avance pour les développeurs Java. Il a quelques verrues (par exemple, vous devez explicitement demander l'optimisation des appels de fin, bien que cela puisse changer un jour si TCO est ajouté à la JVM). Les macros, bien que non hygiéniques, ont certaines fonctionnalités pour vous aider à éviter la capture de variables, de sorte que vous pouvez capturer des variables si vous le souhaitez vraiment, tout en courant moins de risque de le faire accidentellement que dans CL. Vous avez un accès facile à toutes les bibliothèques Java; c'est probablement une bonne chose pour le code du «monde réel», et assez inutile en termes d'apprentissage. Il possède un ensemble de bibliothèques pour les structures de données persistantes et la prise en charge de STM, ce qui le rend très intéressant d'un point de vue simultané; cela en fait probablement votre meilleur pari si vous ' souhaitez en savoir plus sur les nouvelles méthodes de gestion de la programmation simultanée et parallèle. Il semble que Clojure soit aussi utilisable pour les grandes applications de production que Java, dans le sens où il aura la capacité de faire les «trucs moche» que vous faites dans les applications de production que vous préférez ne pas faire et ne pas faire lorsque vous apprenez.
Emacs Lisp. En termes de LISP, ce n'est pas l'un des meilleurs exemples. L'un de ses plus gros défauts est la portée dynamique, mais il y en a beaucoup d'autres. Cependant, si vous êtes un utilisateur d'Emacs, c'est peut-être l'outil le plus puissant que vous puissiez apprendre pour améliorer votre utilisation de l'éditeur. Combien vous apprendrez vraiment en apprenant Emacs Lisp, au-delà de la façon d'étendre Emacs, est pour moi une question ouverte cependant; Je ne sais pas à quelle fréquence des techniques intéressantes telles que les fonctions d'ordre élevé sont réellement utilisées dans Emacs Lisp.
Mise à jour 2018
Cela fait presque une décennie que j'ai écrit cet article et la famille de langages Lisp semble maintenant gagner une place importante dans la conscience générale des programmeurs. Une grande partie de cela semble être liée à Clojure qui est non seulement devenu un dialecte correctement séparé de Lisp à part entière, introduisant nombre de ses propres bonnes idées, mais a également maintenant une version presque identique ciblant JavaScript et a inspiré de nombreux autres Lisps ciblant d'autres plates-formes. Par exemple, Hy cible l'AST et le bytecode CPython, visant d'abord l'interopérabilité avec Python, mais utilisant les idées de Clojure «en cas de doute». (Bien qu'à partir des derniers commits, ces derniers peuvent changer un peu.)
Le grand changement que cela apporte dans votre processus de prise de décision est que vous devriez également examiner tous les langages Lisps ou de type Lisp disponibles et interagir avec les langages ou plates-formes que vous utilisez déjà, que ce soit Perl , Ruby , Erlang , Go ou même C ++ sur les microcontrôleurs .