it-swarm.com.ru

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

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

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

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

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

Вещи, которые я люблю

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

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

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


Обновления

  1. Я в основном использовал MzScheme, который мне очень нравится, как только я получил поддержку readline. Я не запускаю графический интерфейс в Unix, так что мне показалось, что это хороший вариант.

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

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

69
Gregg Lind

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

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

62
Greg Hewgill

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

Я играл с Common LISP, это прекрасно. Я закончил первые 3 главы и Metacircular Evaluator в SICP в DrScheme, и это тоже прекрасно. Конечно, вы очень выиграете от их изучения.

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

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

31
dnolen

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

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

19
Bryan Kyle

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

18
Gregg Lind

Contra Chuck, преимущество Common LISP в том, что у него есть стандарт, к которому придерживаются и к которому стремятся реализации, так что вы можете разрабатывать в основном с SBCL (который имеет отличную проверку и вывод типов), а затем, скажем, развертываться как исполняемый файл, связанный с Библиотеки C (с ECL или другими) или в виде .jar, использующие библиотеки Java (с ABCL), или с Mac или встроенным графическим интерфейсом Windows (Clozure, оба). Common 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. Но это не очень важно: это не многопоточность или разносторонняя сеть или библиотека последовательных процессов . В этом последнем примере только один #+sbcl/#-sbcl, хотя он работает в пяти реализациях. Потому что он опирается на код, который был тщательно портирован.

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

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

18
ayrnieu

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

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

9
Chuck

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

7
mletterle

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

6
Rayne

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

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

5
Javier

Посмотрите на IronScheme .

4
Nemanja Trifunovic

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

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

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

4
Andrey Fedorov

Я не знаю LISP, но вот почему я считаю схему PLT хорошим выбором:

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

  2. DrScheme
    DrScheme - это удивительная среда программирования, которая поставляется с компилятором, степпером, средствами проверки синтаксиса, REPL, поддержкой множества языков и является расширяемой. Это делает весь опыт веселым. Смотрите некоторые скриншоты

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

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

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

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

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

4
unj2

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

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

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

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

3
Jay

Я думаю, что вы либо хотите Common LISP или PLT Scheme.

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

1
Leslie P. Polzer

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

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

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

1
Kevin Peterson

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

0
Marko

Я фанат Схемы, но прошло уже более 10 лет с тех пор, как я что-то делал со Схемой.

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

0
Tim