Qui Lisp devrais-je apprendre?
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
Bon support de bibliothèque, bon environnements, et le support de l'Unicode.
Choses que je n'aime pas
Guerre menée. Fonctionnalités qui sont utiles au début, mais interférer avec l'apprentissage à long terme.
Mises à jour
-
J'ai été principalement à 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.
-
Je suis aussi très heureux que Clojure est un outil facile à installer .paquet deb pour debian, 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.
-
Après la lecture de beaucoup plus de SICP, je ne comprendre les enjeux autour de la queue de la récursivité beaucoup mieux.
- Un paquet deb pour l'installer? J'espère que c'est la version 1.0, sinon, vous êtes probablement en utilisant quelque chose d'ancien. Je n'ai pas à obtenir quelque chose hors d'un svn et en tapant "ant" crée une forte barrière à l'entrée. De ne pas mentionner que depuis la version 1.0, il n'y a aucune raison pour obtenir quelque chose hors de l'svn, sauf si vous voulez le bord de saignement.
- Eh bien, vous êtes les bienvenus à toi de décider ce qui est une barrière à l'entrée. Je ne travaille pas en Java, et je ne connais pas son système de construction. Je n'ai pas de fourmi installé. Comme il s'avère, il est 1.0.0. Je ne sais pas pourquoi vous suivez ce fil de si près, ou pourquoi vous voulez garder à m'insulter et de mes opinions. Il ne fait pas de Clojure plus attrayant avec vous comme son avocat.
- Revenir à ce fil, plus d'un an plus tard, je peux voir comment je sonne comme une bite ici. Je tiens à m'excuser pour sonner comme ça. Je pense que nous sommes juste différents types de codeurs. Aussi, je pense que vous trouverez que la Clojure situation s'est améliorée un peu avec des trucs comme Leiningen, Gâteau, et Cljr avoir été créée. Encore une fois, je suis désolé pour sonner de manière offensive. Je vous assure, mes intentions étaient pures.
- Rayne, il faut beaucoup de choses à admettre ce genre de chose! Je ne suis pas sûr de savoir comment on est différents, mais mon temps est limité, et si il descend à lui, si un tech est convivial, je vais être plus susceptibles de l'utiliser.
- Tail-recursion "ésotérisme"? C'est pas plus étrange que le
for
etwhile
boucles de vous trouver dans des langages impératifs. - Cette question serait plus pertinente sur programmers.stackexchange.com
Vous devez vous connecter pour publier un commentaire.
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.
recur
(qui ne peut apparaître que dans une queue de position) qui vous donne une queue d'appel que vous pouvez naturellement exprimer des fonctions récursives avec. La JVM obstacle que j'ai vu quelqu'un se plaindre: aucun unsigned types.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.
En 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.
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 a beaucoup de documentation et 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 plus facile tout vous apprendre LISP.
Contre 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 puis, dire, 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 j'utilise:
qui réduit, à lire l'heure, rien sur ABCL (il a déjà), à
(defun special-variable-p (symbol) (si:specialp symbol))
sur la 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 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
même, car il fonctionne sur cinq implémentations. Parce qu'il s'appuie sur le code qui a été soigneusement porté.Mais ce qui l'autorise (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 de garder l'HyperSpec d'une touche de loin (pour moi,
M-x hyperspec RET do-symbols RET
est suffisante proximité de la Bible.), et pensez à acheter quelques livres. J'ai Pratique Common Lisp, vient de Laisser Plus De Lambda, et acheter PAIP réel dès maintenant.Mais même si Common Lisp est le 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 types 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 Petit 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, mal, dans le mauvais lisp. Méta-Greenspun.)
Lisp plus gros problème est qu'il n'y a aucune justification standard chacun s'en tient à. Vous ne vous contentez pas avoir à choisir entre la Common Lisp et Scheme, vous avez à choisir entre plusieurs incompatible implémentations de Common Lisp et plusieurs incompatible implémentations de Système, ainsi que d'autres petites choses comme l'Arc et Clojure.
Je recommande de commencer avec MzScheme. Il est très populaire, il est activement développé, il a beaucoup de bibliothèques offrant les caractéristiques d'un environnement de programmation moderne, ainsi que le Schéma est un peu plus simple (pour ne pas dire mieux, juste plus simple) que Common Lisp.
Apprendre elisp de sorte que vous pouvez étendre Emacs.
Aller avec Clojure. C'est une belle langue, avec un accès complet à n'importe quelle bibliothèque Java. Il a été en développement pendant un peu plus de 2 ans et a déjà 3 IDE plugins en développement et un livre publié en avril à ce sujet. Il est très rapide, très belle et élégante. Vous ne pouvez pas vous tromper avec Clojure.
Pour moi, la base de la théorie de Régime est beaucoup plus convaincante. PLTScheme est, de loin, le plus activement développé LISP, je l'ai trouvé. Malheureusement, il a une prolifération de frappe qui obscurcit la beauté de Lisp.
J'aimerais voir quelque chose comme arc de réussir, mais cela semble peu probable.
Prendre un coup d'oeil à IronScheme.
Conjecture: lors de l'apprentissage de votre premier lisp, n'apprennent pas celui que vous finirez par utiliser pour son développement.
Lemme: apprendre à l'Arc. C'est tout le "dur à analyser des" choses en lisp - fermetures, les macros, les continuations, avec aucun de Clojure Java interop complexité, la CL de l'espace de noms de la confusion, ou du Régime nom de la fragmentation. Si vous êtes dédié, vous pouvez apprendre toutes ces choses en un week-end. Si vous êtes forte et dévouée, en une nuit.
Et il va faire l'apprentissage de toutes les autres lisps un beaucoup plus facile.
Je ne sais pas Lisp, mais voici pourquoi je pense que la PLT est un bon choix:
Vraiment De Bonnes Documentations
http://download.plt-scheme.org/doc/html/
DrScheme
DrScheme est un incroyable environnement de programmation qui vient avec un compilateur, pas à pas, la syntaxe de dames, REPL, une multitude de langues et est extensible. Cela rend toute l'expérience du plaisir. Voir quelques captures d'écran
Un bon Soutien de la communauté.
La communauté est très enthousiaste au sujet de leur langue et de très favorables à trop. Si vous avez des questions, des listes de diffusion, des groupes et des forums sont disponibles. Même les auteurs sont très très accessible.
La Poursuite De La Recherche
PLT est très actif et de continuer à faire leur outil de mieux en mieux. Vous pouvez vous attendre à beaucoup d'innovations dans les labos. par exemple. Im très excité à propos de l'utilisation de ce: http://blog.plt-scheme.org/2009/05/typed-scheme-20.html
Gratuitement des Livres et des tutoriaux intéressants pour vous aider à démarrer.
http://www.htdp.org/
http://world.cs.brown.edu/
Des modules et de vastes bibliothèques.
http://www.cs.utah.edu/plt/develop/
http://planet.plt-scheme.org/
voir aussi docs
Si vous êtes d'apprentissage, donner DrScheme un essai.
Vous savez... Quand je me suis intéressé en Lisp j'ai aussi pensé que je devais avoir à choisir. Puis, après avoir lu et beaucoup demander, j'ai fini par choisir Common Lisp. Pas parce que c'est "mieux" que le Régime d'une manière absolue, mais parce qu'il avait des traits je savais que je serais probablement utiliser dans les 2-3 prochaines années, dans mes projets:
Donc, si j'étais vous, je voudrais commencer à apprendre un tout petit peu de chaque langue, et découvrez quels sont les relative les forces et les faiblesses de chacun d'eux (je veux dire, ceux qui sont liés à ce que vous aurez besoin/envie de faire plus souvent), de sorte que vous j'ai pu en choisir un. Vous pourriez découvrir que vous devrez apprendre les autres plus tard aussi (qui m'est arrivé: j'ai dû apprendre davantage au Régime après une année d'études Common Lisp)
Comme un Arc, Clojure et Luxuriante, et ne les connaissez pas. Je suppose que le même argument pourrait s'appliquer à eux aussi... Les raisons pour lesquelles je ne voulais pas trop investir sur eux: l'Arc ne semble pas être intéressant pour le calcul numérique, et de P. Graham semble obssessed par le code de la taille (au point de rendre son code illisible); Clojure semble beau, mais je n'aime pas la JVM. Et Luxuriante... Bien, en plus de l'utilisation dynamique de la portée, de la compilés et interprétés versions de la langue sont très différents -- et vous ne pouvez pas compiler les fonctions récursives. Donc, c'était soit le Régime ou Common Lisp pour moi.
binding
.Je pense que vous voulez Common Lisp ou PLT Régime.
L'ancien vient avec beaucoup de liberté et de puissance (qui peut déstabiliser au début) et le dernier est livré avec un ensemble de bibliothèques, correspondant à des tutoriels et bien intégré.
Chercher quelque chose, mais Clojure, aller avec elle, et vous serez dans une meilleure position pour évaluer plus tard.
Vous avez formulé cette question qui Lisp est le meilleur moyen pour apprendre Lisp, et pour moi c'est un Lisp qui est construite à partir de primitives de bas niveau, alors que de grandes parties de Clojure sont écrits en Java.
Si vous aviez formulé cette question qui est le meilleur Lisp pour démarrer un nouveau projet, puis Clojure peut être le meilleur choix.
Je suis un fan de Régime, mais il a été plus de 10 ans que j'ai fait n'importe quoi avec Schéma.
comme d'autres l'ont dit - il suffit de choisir un et s'en aller.
Il y a très peu de vrais choix, soit SBCL, Clojure ou PLTScheme.