какой lisp я должен изучить?

<h3>какой lisp (диалект) я должен выучить и почему?</h3><p>фрагментация между cl и scheme замедляет поглощение (по крайней мере, для меня!).</p><p>итак, дайте мне "верный ответ", пожалуйста!</p><p>я пытался читать сравнения характеристик, и они, похоже, увязли в эзотерике (которую я не до конца понимаю), например, является ли диалект полностью хвостовой рекурсивной, и тому подобное. я надеюсь, что вы все (все вместе) сможете прояснить непрозрачные различия.</p><h3>вещи, которые я люблю</h3><p>хорошая поддержка библиотек, хорошая среда и поддержка unicode.</p><h3>вещи, которые мне не нравятся</h3><p>flamewars. особенности, которые полезны в начале, но мешают долгосрочному обучению.</p><hr><h3>обновления</h3><ol> <li> <p>я в основном использовал mzscheme, который мне очень нравится, как только я получил поддержку readline. я не запускаю графический интерфейс в unix, так что мне показалось, что это хороший вариант.</p> </li> <li> <p>я также очень рад, что clojure имеет легко устанавливаемый пакет .deb на debian, поэтому с ним гораздо проще играть. это большая победа. несмотря на враждебность некоторых довольно легко гневящихся ниже, низкий барьер для входа - это победа. мне нравится быть ложным.</p> </li> <li> <p>прочитав намного больше <a href="http://mitpress.mit.edu/sicp/">sicp</a> , я гораздо лучше понимаю проблемы, связанные с хвостовой рекурсией.</p> </li> </ol>

<p> <a href="http://clojure.org">clojure</a> - это активно развивающийся современный диалект lisp. он основан на jvm, поэтому все библиотеки java доступны сразу и поэтому также имеют поддержку unicode.</p><p>это одна альтернатива, а не единый верный ответ.</p>

<p> <a href="http://clojure.org"><strong> clojure </strong></a> - это отличный диалект lisp, который способствует функциональному программированию. он работает на jvm, поэтому у вас есть доступ к любым библиотекам java, которые вы могли бы использовать. на сайте есть отличная документация и <a href="http://clojure.blip.tv/">скринкасты</a> , чтобы помочь вам учиться. еще одним преимуществом является то, что он действительно прост в установке, в отличие от многих других диалектов.</p><p>если вы просто пытаетесь понять, что такое --- <a href="http://www.gnu.org/software/emacs/"><strong> emacs </strong></a> (в частности, emacslisp) - другая альтернатива. он поставляется с невероятной документацией, учебными пособиями и множеством примеров кода. скринкасты также довольно легко найти. одним из больших преимуществ emacs является то, что редактор написан на lisp, поэтому редактор, естественно, имеет очень хорошую поддержку для запуска, редактирования и отладки lisp. кроме того, вы можете расширить редактор, чтобы упростить свои повседневные задачи по редактированию текста <em>, в то время как </em> вы изучаете lisp.</p>

<p>просто выберите один и изучите его. к тому времени, когда вы выясните различия, у вас будет возможность выбрать снова, если вы выбрали плохо в первый раз.</p>

<p>contra chuck, преимущество common lisp в том, что у него есть стандарт, к которому придерживаются и к которому стремятся реализации, так что вы можете разрабатывать в основном с sbcl (который имеет отличную проверку и вывод типов), а затем, скажем, развертываться как исполняемый файл, связанный с библиотеки c (с ecl или другими) или в виде .jar, использующие библиотеки java (с abcl), или с mac или встроенным графическим интерфейсом windows (clozure, оба). common lisp удивительно переносим между архитектурами и реализациями, и со временем, и common lispers прилагает усилия для того, чтобы все было так, с поддержкой языка. в качестве иллюстрации, одна глупая дивергенция нестандартного поведения - вопрос "это специальная переменная?" таким образом, я ответил на это во всех реализациях, которые я использую:</p><pre><code>#-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))) </code></pre><p>который сокращает время чтения до нуля в abcl (он уже есть), до <code>(defun special-variable-p (symbol) (si:specialp symbol))</code> в ecl и так далее. так что я могу поместить это в мои файлы .rc и использовать общую функцию в repl. но это не очень важно: это не <a href="http://common-lisp.net/project/bordeaux-threads/">многопоточность</a> или <a href="http://www.cliki.net/iolib">разносторонняя сеть</a> или <a href="http://www.cliki.net/csp">библиотека последовательных процессов</a> . в этом последнем примере только один <code>#+sbcl/#-sbcl</code>, хотя он работает в пяти реализациях. потому что он опирается на код, который был тщательно портирован.</p><p>но то, что допускает эти (и другие) преимущества, также ставит перед учеником свои собственные задачи: общий lisp - очень большой язык. это не то, что вы можете проглотить за неделю или две, как я сделал clojure (но мой clojure уже распадается с решающими изменениями, которые предстоит развернуть - этот язык, хотя и тяжелый со своими достоинствами, напомнил мне в отличие от многое из того, что мне нравится в common lisp.) так что вам нужно прочитать много <a href="http://www.cliki.net/document">этой страницы</a> и держать hyperspec нажатой клавишу (для меня <code>m-x hyperspec ret do-symbols ret</code> достаточно близка к библии.), и подумайте о покупке нескольких книг. у меня <a href="http://gigamonkeys.com/book/">practical common lisp</a> , только что получил <a href="http://letoverlambda.com/">let over lambda</a> и скоро куплю <a href="https://rads.stackoverflow.com/amzn/click/com/1558601910">paip</a> .</p><p>но даже если common lisp является <strong> верным ответом </strong>, вы не будете тратить свое время впустую, просто "выбрав" какую-то обманчиво яркую альтернативу (- "потому что обычный cl не показывает вам все, что могут сделать его макросы, и у него больше <a href="http://gist.github.com/62946">видов макросов</a> , чем кто-либо другой. обычное сравнение - между плохим cl и синтаксически оптимизированной альтернативой x). вы все еще изучите основы, вы все равно сможете использовать многое из того, что можете прочитать в sicp, on lisp, <a href="http://books.google.com/books?id=xyo-klexvnmc">the little schemer</a> и т.д. lisp, даже неправильный lisp, все же лучше, чем не-lisp. (но вы потратите некоторое время на реализацию частей правильного lisp, плохо, в неправильном lisp. meta-greenspun.)</p>

<p>самая большая проблема lisp заключается в том, что нет единого стандарта, которого придерживаются все. вам не нужно просто выбирать между common lisp и scheme; вам нужно выбирать между несколькими несовместимыми реализациями common lisp и несколькими несовместимыми реализациями scheme, а также другими мелочами, такими как arc и clojure.</p><p>я бы порекомендовал начать с <a href="http://www.plt-scheme.org/software/mzscheme/">mzscheme</a> . он популярен, активно развивается, имеет много библиотек, предлагающих возможности современной среды программирования, и scheme несколько проще (не сказать лучше, просто проще), чем common lisp.</p>

<p>изучите elisp, чтобы вы могли расширять emacs.</p>

<p>иди с clojure. это удивительный язык с полным доступом к любой библиотеке java. он находится в разработке чуть более 2 лет и уже имеет 3 ide плагина в разработке и опубликованную в апреле книгу об этом. это очень быстро, очень элегантно и красиво. вы не можете пойти не так, как надо с clojure.</p>

<p>для меня основополагающая теория схемы гораздо более убедительна. pltscheme, безусловно, самый активно разработанный lisp, который я нашел. к сожалению, он имеет широкое распространение типирования, что скрывает красоту lisp.</p><p>я бы хотел, чтобы что-то вроде дуги получилось, но это маловероятно.</p>

<p>посмотрите на <a href="http://www.codeproject.com/kb/net-languages/playingwithironscheme.aspx">ironscheme</a> .</p>

<p>гипотеза: изучая свой первый lisp, не изучайте тот, который вы в конечном итоге будете использовать для окончательной разработки.</p><p>лемма: выучить арк. в lisp есть все, что "трудно поймать" - замыкания, макросы, продолжения без сложностей взаимодействия java в clojure, путаницы в пространстве имен cl или фрагментации имени схемы. если вы преданны, вы можете изучить все эти вещи в выходные дни. если вы проницательны и преданны, ночью.</p><p>и это облегчит изучение всех других бубнов <em>много</em>.</p>

<p>я не знаю lisp, но вот почему я считаю схему plt хорошим выбором:</p><ol> <li> <p>действительно хорошая документация<br> <a href="http://download.plt-scheme.org/doc/html/">http://download.plt-scheme.org/doc/html/</a> </p> </li> <li> <p>drscheme<br> drscheme - это удивительная среда программирования, которая поставляется с компилятором, степпером, средствами проверки синтаксиса, repl, поддержкой множества языков и является расширяемой. это делает весь опыт веселым. смотрите некоторые <a href="http://plt-scheme.org/screenshots/">скриншоты</a> </p> </li> <li> <p>хорошая поддержка со стороны сообщества.<br> сообщество с большим энтузиазмом относится к своему языку и поддерживает. если у вас есть какие-либо вопросы, доступны списки рассылки, группы и форумы. даже авторы очень и очень доступны.</p> </li> <li> <p>продолжение исследований<br> plt очень активны и продолжают совершенствовать свой инструмент. вы можете ожидать много инноваций от лабораторий. например. я очень рад использовать это: <a href="http://blog.plt-scheme.org/2009/05/typed-scheme-20.html">http://blog.plt-scheme.org/2009/05/typed-scheme-20.html</a> </p> </li> <li> <p>бесплатные книги и интересные учебники, чтобы вы начали.<br> <a href="http://www.htdp.org/">http://www.htdp.org/</a> <br> <a href="http://world.cs.brown.edu/">http://world.cs.brown.edu/</a> </p> </li> <li> <p>хорошие модули и обширные библиотеки.<br> <a href="http://www.cs.utah.edu/plt/develop/">http://www.cs.utah.edu/plt/develop/</a> <br> <a href="http://planet.plt-scheme.org/">http://planet.plt-scheme.org/</a> также см. <a href="http://docs.plt-scheme.org/">документы</a> </p> </li> </ol><p>если вы изучаете схему, попробуйте <a href="http://download.plt-scheme.org/">drscheme</a> .</p>

<p>вы знаете ... когда я заинтересовался lisp, я также подумал, что мне придется выбирать. затем, после прочтения и расспросов, я выбрал common lisp. не потому, что он "лучше", чем scheme, а потому, что он имел функции, которые я знал, что, вероятно, буду использовать в ближайшие 2-3 года в своих проектах:</p><ul> <li>очень эффективный компилятор для численных вычислений (sbcl),</li> <li>система условий и ...</li> <li>я должен признать, что slime также сыграл важную роль в этом решении. :-)</li> </ul><p>так что, будь я на вашем месте, я бы начал изучать чуть-чуть каждого языка и выяснить, каковы <em>относительные</em> сильные и слабые стороны каждого из них (я имею в виду те, которые связаны с тем, что вам нужно/хочу сделать чаще всего), чтобы вы могли выбрать один. вы можете просто узнать, что вы узнаете и других позже (случилось со мной - мне пришлось больше изучать схему после одного года изучения common lisp)</p><p>что касается arc, clojure и lush, и не знаю их. я полагаю, что тот же аргумент может быть применим и к ним ... причинами, по которым я не хотел вкладывать в них слишком много средств, было то, что: arc не кажется интересной для численных вычислений, а p. graham кажется одержимым размером кода (для смысл сделать его код нечитабельным); clojure кажется хорошим, но мне не нравится jvm. и lush ... ну, кроме использования динамического контекста, скомпилированные и интерпретированные версии языка <em>очень</em> разные - и вы не можете скомпилировать рекурсивные функции. так что для меня это была либо схема, либо общий lisp.</p>

<p>я думаю, что вы либо хотите common lisp или plt scheme.</p><p>первая поставляется с большой свободой и мощью (что может поначалу ошеломить вас), а вторая поставляется с набором библиотек, соответствующими учебными пособиями и хорошо интегрированной ide.</p>

<p>выберите что-нибудь, кроме clojure, иди с ним, и ты будешь в лучшем положении, чтобы оценить позже.</p><p>вы сформулировали этот вопрос как lisp, который является лучшим средством для изучения lisp, и для меня это должно включать lisp, созданный из низкоуровневых примитивов, в то время как большая часть clojure написана на java.</p><p>если вы сформулировали этот вопрос как лучший lisp для запуска нового проекта, то clojure может быть лучшим выбором.</p>

<p>там очень мало реальных вариантов: sbcl, clojure или pltscheme.</p>

<p>я фанат схемы, но прошло уже более 10 лет с тех пор, как я что-то делал со схемой.</p><p>как сказали другие - просто выбери одну и иди.</p>