74 votes

Qui Lisp devrais-je apprendre?

Greffer sur http://stackoverflow.com/questions/59428/learning-lisp-scheme-interpreter,

O dieux de StackOverflow:

Qui Lisp (dialecte) dois-je apprendre, et pourquoi?

La fragmentation entre les CL et le Régime de ralentit l'absorption (au moins pour moi!).

Alors, donnez-moi la Vraie Réponse, s'il vous plaît.

J'ai essayé de lire en fonction de comparaisons, et ils semblent s'enliser dans l'ésotérisme (que je ne comprends pas tout), comme si le dialecte est entièrement récursives terminales, et la comme. J'espère que vous tous (collectif) peuvent faire l'opacité des différences claires.

Choses que j'aime: un bon support de bibliothèque (moi=gâté par python), bon environnements, support de l'unicode.

Des choses que je n'aime pas: la guerre menée. Fonctionnalités qui sont utiles au début, mais interférer avec l'apprentissage à long terme.

Merci! (s'il vous plaît garder la flamme libre).

mises à jour:

  1. Ive été la plupart du temps à l'aide de MzScheme, qui me plait bien, une fois que j'ai readline soutien. Je ne suis pas un interface graphique sous unix, de sorte qu'il semblait être un bon environnement option pour moi.
  2. Je suis aussi très heureux que Clojure est un outil facile à installer .paquet deb pour debian unstable, il est donc beaucoup plus facile de jouer avec. C'est une grande victoire. Malgré l'hostilité de certains plutôt facile à la colère ci-dessous, une faible barrière à l'entrée est une victoire. J'aime être spoonfed.
  3. Après la lecture de beaucoup plus de SICP, je ne comprendre les enjeux autour de la queue de la récursivité beaucoup mieux.

65voto

Greg Hewgill Points 356191

Clojure est activement développé, moderne dialecte de Lisp. Il est basé sur la JVM, de sorte que toutes les bibliothèques Java sont disponibles immédiatement, et a donc également pour le support de l'Unicode.

C'est une solution, pas Une Vraie Réponse.

34voto

dnolen Points 12833

Si vous voulez éviter la guerre menée et que vous aimez les bibliothèques aller avec Clojure. Il est petit, rapide, et la communauté est utile et non dogmatique. C'est Lisp moins l'absurde trucs des années 1980 . Il a un BDFL et si vous avez une bonne idée, il y a une putain de bonne chance qu'il aura mis en œuvre dans le langage.

J'ai joué avec Common Lisp, c'est une belle chose. J'ai terminé les 3 premiers chapitres et le Metacircular Évaluateur dans SICP dans DrScheme, et c'est belle chose. Bien sûr, vous pourrez bénéficier grandement de l'apprentissage de ces.

Mais, au fil du temps j'en suis venu à la tenue de petites langues chère à mon cœur. Je ne vais pas mentir, j'aime le Javascript et j'aime le C (et goddammit si toutes les langues n'ont pas de C de base à son cœur) parce qu'ils sont petits.

Clojure est petit. Elle est élégante. C'est un langage de notre temps.

23voto

Gregg Lind Points 6905

Il suffit de choisir un, et de l'apprendre. Le temps de comprendre les différences, vous serez en mesure de choisir à nouveau, si vous avez choisi mal la première fois.

19voto

ayrnieu Points 1436

Contra Chuck, un avantage de Common Lisp, c'est qu'il a une norme que les implémentations de bâton et de viser, de sorte que vous pouvez développer en grande partie avec SBCL (qui a d'excellentes vérification du type et de l'inférence) et ensuite, de dire, de se déployer comme un exécutable lié avec les bibliothèques C (avec ECL ou autres) ou en tant que .pot en faisant usage des bibliothèques Java (avec ABCL), ou avec un Mac ou un Windows GUI natif (Clozure, les deux). Common Lisp est incroyablement portable à travers les architectures et les cours de mise en œuvre et au fil du temps, et de la Commune Lispers faire des efforts pour garder les choses de cette façon, avec le soutien de la langue. Comme une illustration, un idiot divergence de comportement non normalisés est la question "est-ce une variable spéciale?" Donc j'ai répondu à travers les implémentations que j'ai utiliser:

#-abcl
(defun special-variable-p (symbol)
  #+ecl(si:specialp symbol)
  #+ccl(proclaimed-special-p symbol)
  #+sbcl(equal '(:special t)
               (multiple-value-list-int:info :variable :kind symbol)))

ce qui réduit, à lire l'heure, rien sur ABCL (il a déjà), à l' (defun special-variable-p (symbol) (si:specialp symbol)) sur LISTE, et ainsi de suite. Donc, je peux mettre ça dans mon .rc fichiers et utiliser la fonction commune à la REPL. Mais ce n'est pas très important: ce n'est pas le filetage ou diversement adossés à des réseaux ou à une Communication de Processus Séquentiels de la bibliothèque. Ce dernier exemple n'a qu'un seul #+sbcl/#-sbcl , alors même qu'elle s'exécute sur cinq implémentations. Parce qu'il s'appuie sur le code qui a été soigneusement porté.

Mais ce qui le permet (et d'autres) avantages pose également son propre défi pour l'apprenant: Common Lisp est une très grosse langue. Ce n'est pas quelque chose que vous pouvez slurp dans une semaine ou deux, comme je l'ai fait Clojure (mais mon Clojure est déjà en décomposition avec la rupture des changements à déployer que la langue, bien que lourd avec ses propres mérites, m'a rappelé par le contraste de beaucoup de ce que j'aime à propos de Common Lisp.) Donc, vous devriez lire beaucoup de cette page, et garder l'HyperSpec d'une touche de loin (pour moi, M-x hyperspec RET do-symbols RET est suffisant proximité de la Bible.), et pensez à acheter quelques livres. Je Pratique Common Lisp, il suffit de Laisser Plus de Lambda, et acheter PAIP réel dès maintenant.

Mais même si Common Lisp est la Vraie Réponse, vous n'aurez pas complètement les déchets de votre temps par les "juste ramasser" certains faussement flashy alternative (--"trompeurs" parce que banal CL ne vous montre pas tout ce que son macros peuvent le faire, et il a plus de sortes de macros que personne. L'habituelle comparaison est entre de mauvaises CL et de la syntaxe-optimisé alternative X). Vous aurez encore à apprendre les bases, vous pouvez toujours utiliser la plus grande partie de ce que vous pouvez lire dans SICP, Sur le langage Lisp, Le Peu Intrigant, etc. Un lisp, même la mauvaise lisp, c'est toujours mieux qu'un non-lisp. (Mais vous allez passer un peu de votre temps à la mise en œuvre de certaines parties de la droite lisp, le mal, le mal de lisp. Méta-Greenspun.)

19voto

Bryan Kyle Points 5931

Clojure est un grand dialecte de LISP qui favorise la programmation fonctionnelle. Il tourne sur la JVM si vous avez accès à toutes les bibliothèques Java vous pourriez être utilisé pour l'aide. Le site possède une documentation et des screencasts pour vous aider à apprendre. Un autre avantage est qu'il est très facile à installer, contrairement à beaucoup d'autres dialectes.

Si vous êtes simplement à la recherche pour analyser les concepts Emacs (EmacsLISP en particulier) est une autre alternative. Il est livré avec incroyable de la documentation, des tutoriels, et beaucoup d'exemples de code. Screencasts sont assez faciles à trouver. Un des grands avantages d'Emacs est que l'éditeur est écrit en LISP si l'éditeur a naturellement un très bon support pour l'exécution, de l'édition et de débogage de LISP. En outre, vous pouvez étendre l'éditeur pour rendre votre chaque jour de l'édition du texte des besoins de plus facile alors que vous apprendre LISP.

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