94 votes

Quel dialecte de Lisp devrais-je apprendre?

Je sais qu'il existe quelques dialectes différents du lisp. Ayant décidé que l'apprentissage de Lisp serait une nouvelle expérience intellectuelle, j'aimerais savoir quel dialecte Lisp apprendre et pourquoi.

Y en at-il un qui soit plus populaire que les autres? Est-ce que l'un d'entre eux est plus complet, mieux documenté et soutenu? Quels sont les avantages et les inconvénients de ce dialecte?

79voto

Curt Sampson Points 10866

Vous souhaitez rechercher un équilibre entre la simplicité et la propreté, les caractéristiques attrayantes, et une plate-forme qui vous permettra d'écrire intéressant et utile logiciel (pour vous) ainsi que de servir comme un outil d'apprentissage. (Cette dernière va vous tenir en haleine et de l'apprentissage pour beaucoup plus longtemps.) Voici quelques possibilités:

  1. Régime. Probablement le plus propre de tous les dialectes. C'est sans doute pourquoi Le Petit Intrigant a été traduit de LISP en Scheme. Le cinquième Schéma de spécification standard, R5R2, c'est une excellente éducation dans et de lui-même; il peut être le plus beau de la langue et de la spécification de bibliothèque que j'ai jamais lu, ainsi que la plus courte qui est assez complet. Le PLT Régime de plate-forme comprend un assez décent interpréteur et compilateur, est bon pour l'écriture de scripts, et a également certains outils visuels qui font qu'il est excellent pour l'apprentissage.

  2. Common Lisp. Probablement le plus portable et complète de la variante, c'est probablement ce que vous voulez si vous voulez écrire des choses telles que les logiciels commerciaux. La norme définit un grand nombre de bibliothèques, et beaucoup plus sont disponibles au-delà de cela, il a CLOS, ce qui va probablement vous apprendre plus au sujet de OO que n'importe quel langage OO pourrait, et certains compilateurs sont très bons. Les inconvénients comprennent certaines verrues, ce Schéma n'a pas (comme ayant un espace de noms pour les variables qui font référence à des fonctions), de ne pas être propre et simple (comme c'est le cas avec tout ce qui a eu pour les extensions et faire les compromis nécessaires pour les grandes applications dans le monde réel), n'ayant pas hygiénique des macros, et mettant l'accent sur la récursivité beaucoup moins de Régime.

  3. Clojure. Cela fonctionne sur la JVM, ce qui peut leur donner un coup de pouce pour les développeurs Java. Il a un peu de verrues (par exemple, vous devez le demander explicitement la queue d'appel d'optimisation, bien que cela puisse changer un jour, si le coût total de possession est ajouté à la JVM). Les macros, tout n'est pas hygiénique, ont quelques fonctionnalités pour vous aider à éviter la variable de capture, de sorte que vous pouvez capturer des variables si vous le voulez vraiment, tout en courant le moins de risques de faire accidentellement alors que dans CL. Vous avez facilement accès à toutes les bibliothèques Java; c'est probablement une bonne chose pour le "monde réel" de code, et assez inutile en termes d'apprentissage. C'est un ensemble de bibliothèques pour les structures de données et de soutien pour la STM, qui font qu'il est très intéressant à partir d'un tel point de vue, ce qui en fait probablement votre meilleur pari si vous êtes intéressés à en apprendre plus sur les nouvelles méthodes de gestion des concurrentes et la programmation parallèle. Il semble comme si Clojure est aussi utilisable pour les grands, les applications de production, comme Java, dans le sens qu'il va y avoir la capacité de faire de la "laide trucs" que vous n'en production des applications que vous préférez ne pas le faire et ne pas faire lorsque vous êtes en train d'apprendre.

  4. Emacs Lisp. En termes de LISP, ce n'est pas l'un des meilleurs exemples. L'un de ses plus grands défauts est dynamique portée, mais il y a beaucoup d'autres. Toutefois, si vous êtes un utilisateur d'Emacs, c'est peut être l'outil le plus puissant que vous pouvez apprendre à améliorer votre utilisation de l'éditeur. Combien vous auriez vraiment apprendre à partir de l'apprentissage Emacs Lisp, au-delà de la façon de prolonger Emacs, est pour moi une question ouverte; cependant, je ne sais pas combien de fois techniques intéressantes telles que des fonctions d'ordre sont vraiment utilisées dans Emacs Lisp.

25voto

J. Polfer Points 5895

Je dirais Scheme, uniquement à cause du Little Schemer , qui est l’un des livres les plus époustouflants, mais pourtant extrêmement difficiles, que j’ai jamais essayé de lire.

10voto

skypher Points 2158

Je peux recommander Common Lisp sur SBCL . Cette combinaison est rapide, puissante, mature et bien documentée.

9voto

dnolen Points 12833

Aussi Clojure est un gagne beaucoup de mindshare ces jours-ci, et pour une bonne raison. De grandes structures de données, profondément bon simultanéité de soutien (met Régime et CL de honte à cet égard), et une grande communauté. Il est également relativement simple, CL est au moins aussi compliqué que C++.

Ce n'est pas à dire que je ne les aime pas, ou CL de Régime. J'ai appris le Schéma SICP. Et CL m'a amené à Clojure. Tout dépend de vos objectifs, je suppose. Si vous voulez en savoir un Lisp qui est extrêmement pratique pour aller Clojure. Sinon, CL ou de Régime sont à la fois grands.

5voto

jrockway Points 23734

Je préfère CL, car j'aime la programmation orientée objet, et CLOS est le système d'objet le plus sympathique qui soit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X