Какую Lisp мне следует узнать?

Какой Lisp (диалект) я должен узнать и почему?

Фрагментация между CL и Scheme замедляет поглощение (по крайней мере для меня!).

Итак, дайте мне "верный ответ", пожалуйста!

Я попытался прочитать сравнения функций, и они, похоже, увязли в эзотерике (что я не совсем понимаю), например, является ли диалект полностью хвостовым рекурсивным и тому подобное. Я надеюсь, что вы все (коллективно) можете сделать непрозрачные различия ясными.

Вещи, которые мне нравятся

Хорошая поддержка библиотеки, хорошая среда и поддержка Unicode.

Вещи, которые мне не нравятся

Flamewars. Особенности, которые полезны в начале, но мешают долгосрочному обучению.


Обновление

  • В основном я использую MzScheme, который мне очень нравится, когда я получаю поддержку readline. Я не запускаю GUI в Unix, поэтому для меня это был прекрасный вариант.

  • Я также очень рад, что Clojure имеет простой в установке пакет .deb на debian, поэтому с ним намного проще играть. Это большая победа. Несмотря на враждебность некоторого довольно легкого к гневу ниже, низкий барьер для входа - победа. Мне нравится быть ложкой.

  • После прочтения намного большего SICP я лучше понимаю проблемы вокруг хвостовой рекурсии.

Ответ 1

Clojure - это активно развитый, современный диалект Lisp. Он основан на JVM, поэтому все библиотеки Java сразу доступны и, следовательно, также поддерживают Unicode.

Это одна из альтернатив, а не один истинный ответ.

Ответ 2

Если вы хотите, чтобы избежать flamewars, и вы любите библиотеки, перейдите с Clojure. Он маленький, он быстрый, и сообщество полезно и не догматично. Это Lisp минус абсурдный рывок 1980-х годов. У него есть BDFL, и если у вас есть хорошая идея, есть чертовски хороший шанс, что он будет внедрен в язык.

Я играл с Common Lisp, это прекрасная вещь. Я закончил первые 3 главы и Metacircular Evaluator в SICP в DrScheme, и это тоже замечательно. Разумеется, вам будет полезно узнать об этом.

Но со временем я пришел, чтобы удержать маленькие языки, дорогие для моего сердца. Я не буду лгать, я люблю Javascript, и я люблю C (и, черт возьми, если на каждом языке нет сердечника C в нем), потому что они маленькие.

Clojure мал. Это элегантно. Это язык для нашего времени.

Ответ 3

Contra Chuck, преимущество Common Lisp заключается в том, что у него есть стандарт, к которому применяются реализации и к чему стремятся, так что вы можете в значительной степени развиваться с SBCL (который имеет отличную проверку и вывод типов), а затем, скажем, развернуть как исполняемый файл, связанный с библиотеками C (с ECL или другими) или как .jar с использованием библиотек Java (с ABCL) или с Mac или Windows-родным GUI (Clozure, оба). Общий Lisp удивительно переносим по архитектуре и над реализациями и с течением времени, а Common Lispers прилагает все усилия, чтобы поддерживать такие вещи при поддержке языка. В качестве иллюстрации одним глупым расхождением нестандартного поведения является вопрос: "Это особая переменная?" Поэтому я ответил на все варианты, которые я использую:

#-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)))

который во время чтения уменьшает на ABCL (это уже есть), до (defun special-variable-p (symbol) (si:specialp symbol)) на ECL и т.д. Поэтому я могу поместить это в мои .rc файлы и использовать общую функцию в REPL. Но это не очень важно: это не threading или различно- поддерживаемые сети или библиотека коммуникационных последовательных процессов. Этот последний пример имеет только один #+sbcl/#-sbcl, даже если он работает на пяти реализациях. Потому что он полагается на код, который был тщательно перенесен.

Но что позволяет этот (и другие) преимущества также ставит перед учеником свой вызов: Common Lisp - очень большой язык. Это не то, что вы можете разразиться через неделю или две, как я сделал Clojure (но мой Clojure уже затухает с отменными изменениями, установленными для развертывания), этот язык, хотя и тяжелый по своим достоинствам, напомнил я в отличие от того, что мне нравится в Common Lisp.) Поэтому вы должны прочитать много эту страницу и сохранить HyperSpec нажатие клавиши (для меня M-x hyperspec RET do-symbols RET является достаточной близостью к Библии.), и подумайте о покупке нескольких книг. Я Практический общий Lisp, только что получил Let Over Lambda, и скоро купит PAIP прямо сейчас.

Но даже если Common Lisp является True Ответом, вы не будете полностью тратить свое время на "просто выбор" некоторой обманчиво кричащей альтернативы ( "обманчиво", потому что обычный CL не "t показывает вам все, что могут сделать его макросы, и имеет больше видов макросов, чем кто-либо. Обычное сравнение выполняется между плохим CL и оптимизированным синтаксисом альтернатива X). Вы по-прежнему будете изучать основы, вы все равно можете использовать многое из того, что вы можете прочитать в SICP, Lisp, The Little Schemer и т.д.. Lisp, даже неправильный Lisp, по-прежнему лучше, чем не-w139 > . (Но вы потратите некоторое время на выполнение частей правой Lisp, плохо, в неправильном Lisp. Meta-Greenspun.)

Ответ 4

Clojure - отличный диалект LISP, который способствует функциональному программированию. Он работает на JVM, поэтому у вас есть доступ к любым библиотекам Java, которые вы могли бы использовать. На сайте есть отличная документация и screencasts, чтобы помочь вам учиться. Другим преимуществом является то, что он очень прост в установке, в отличие от многих других диалектов.

Если вы просто пытаетесь понять понятия Emacs (особенно EmacsLISP), это еще одна альтернатива. Он поставляется с невероятной документацией, учебниками и множеством примеров кода. Скринкасты довольно легко найти. Одним из больших преимуществ Emacs является то, что редактор написан в LISP, поэтому редактор, естественно, имеет очень хорошую поддержку для запуска, редактирования и отладки LISP. Кроме того, вы можете расширить редактор, чтобы облегчить ежедневное редактирование текста, изучая LISP.

Ответ 5

Просто выберите один и изучите его. Когда вы выясните различия, вы сможете снова выбрать, если вы выбрали плохо в первый раз.

Ответ 6

Lisp Самая большая проблема заключается в том, что нет никакого стандартного стандарта, которым все придерживаются. Вам просто не нужно выбирать между Common Lisp и Scheme; вам нужно выбрать между несколькими несовместимыми реализациями Common Lisp и несколькими несовместимыми реализациями Схемы, а также другими мелочами, такими как Arc и Clojure.

Я бы рекомендовал начать с MzScheme. Он популярен, он активно развивается, он имеет множество библиотек, предлагающих функции современной среды программирования, а схема несколько проще (не сказать лучше, просто проще), чем Common Lisp.

Ответ 7

Перейдите с Clojure. Это потрясающий язык с полным доступом к любой библиотеке Java. Он находится в разработке чуть более 2 лет и уже имеет 3 плагинов IDE в разработке и книгу, опубликованную в апреле об этом. Это очень быстро, очень элегантно и красиво. Вы не можете ошибиться с Clojure.

Ответ 8

Для меня основополагающая теория Схемы гораздо более убедительна. PLTScheme является, безусловно, наиболее активно разработанным LISP, который я нашел. К сожалению, у него есть многократная типизация, которая скрывает красоту Lisp.

Мне бы хотелось увидеть что-то вроде дуги, но это маловероятно.

Ответ 9

Взгляните на IronScheme.

Ответ 10

Изучите elisp, чтобы расширять Emacs.

Ответ 11

Гипотеза: при изучении вашего первого lisp, не изучайте его, вы закончите использование для окончательной разработки.

Лемма: изучите Arc. Это все "трудно задирать" вещи в lisp - закрытиях, макросах, продолжениях, без какой-либо из Clojure сложности взаимодействия Java, путаницы пространства имен CL или фрагментации имени схемы. Если вы преданы делу, вы можете узнать все эти вещи в выходные. Если вы острые и преданные, ночью.

И это облегчит обучение всем другим lisps.

Ответ 12

Я не знаю Lisp, но вот почему я думаю, что PLT Scheme - хороший выбор:

  • Действительно хорошие документы
    http://download.plt-scheme.org/doc/html/

  • DrScheme
     DrScheme - удивительная среда программирования, которая поставляется с компилятором, шаговым механизмом, синтаксическими шашками, REPL, множеством языков поддержки и расширяема. Это делает весь опыт забавным. Смотрите screenshots

  • Хорошая поддержка сообщества.
    Сообщество с большим энтузиазмом относится к их языку и очень поддерживает. Если у вас есть какие-либо вопросы, доступны списки рассылки, группы и форумы. Даже авторы очень доступны.

  • Продолжение исследований
    PLT очень активен и продолжает делать свой инструмент лучше и лучше. Вы можете ожидать много инноваций в лабораториях. например. Мне очень понравилось это: http://blog.plt-scheme.org/2009/05/typed-scheme-20.html

  • Бесплатные книги и интересные учебники, чтобы вы начали.
    http://www.htdp.org/
    http://world.cs.brown.edu/

  • Хорошие модули и обширные библиотеки.
    http://www.cs.utah.edu/plt/develop/
    http://planet.plt-scheme.org/ также см. docs

Если вы изучаете Схему, попробуйте DrScheme.

Ответ 13

Знаешь... Когда меня заинтересовал Lisp, я тоже подумал, что мне придется выбирать. Затем, прочитав и много спрашивая, я решил выбрать Common Lisp. Не потому, что это "лучше", чем схема абсолютно, но из-за того, что у меня были функции, которые я знал, я бы, вероятно, использовал в ближайшие 2-3 года в своих проектах:

  • Очень эффективный компилятор для численного вычисления (SBCL),
  • Система условий и...
  • Я должен признать, что SLIME также сыграл важную роль в этом решении.: -)

Итак, если бы я был вами, я бы начал изучать крошечный бит каждого языка и выяснять, каковы относительные сильные и слабые стороны каждого (я имею в виду те, которые связаны с тем, что вам нужно или хотите сделать больше всего часто), так что я мог бы выбрать один. Вы можете просто узнать, что позже вы узнаете и другое (случилось со мной - мне пришлось больше узнать о Схеме после одного года изучения Common Lisp)

Что касается Arc, Clojure и Lush, и они не знают этого. Я полагаю, что те же самые аргументы могут быть применимы и к ним... Причины, по которым я не хотел слишком много вкладывать в них, были: Arc, похоже, не интересен для численных вычислений, а П. Грэм, похоже, не понимает размер кода (до смысл сделать его код нечитаемым); Clojure кажется приятным, но мне не нравится JVM. И Lush... Ну, помимо использования динамической области, скомпилированные и интерпретированные версии языка очень разные - и вы не можете скомпилировать рекурсивные функции. Итак, для меня это было либо Scheme, либо Common Lisp.

Ответ 14

Я думаю, вы либо хотите Common Lisp, либо PLT-схему.

Первый обладает большой свободой и мощью (что может сначала ошеломить вас), а последний поставляется с кучей библиотек, соответствующими учебниками и хорошо интегрированной IDE.

Ответ 15

Я поклонник Scheme, но прошло более 10 лет с тех пор, как я сделал что-то с Scheme.

как говорили другие, просто выберите один и идите.

Ответ 16

Есть очень мало реальных вариантов: SBCL, Clojure или PLTScheme.

Ответ 17

Выберите что-нибудь, кроме Clojure, идите с ним, и вы сможете лучше оценить позже.

Вы сформулировали этот вопрос, какой Lisp является лучшим средством для обучения Lisp, и для меня он должен включать Lisp, который создается из примитивов низкого уровня, тогда как большие части Clojure являются написанных на Java.

Если вы сформулировали этот вопрос как лучший Lisp для запуска нового проекта, тогда Clojure может быть лучшим выбором.