Подтвердить что ты не робот

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

Я знаю, что есть несколько разных диалектов Lisp. Решив, что обучение Lisp станет новым интеллектуальным опытом, я хотел бы узнать, какой диалект Lisp учиться и почему.

Есть ли тот, который более популярен, чем другие? Является ли кто-либо из них более "полным", как в, лучше документирован и поддерживается? Каковы плюсы и минусы этого диалекта?

4b9b3361

Ответ 1

Вы хотите найти баланс между простотой и чистотой, привлекательными функциями и платформой, которая позволит вам писать интересное и полезное программное обеспечение (для себя), а также служить инструментом обучения. (Это последнее позволит вам продолжать и учиться намного дольше.) Вот несколько возможностей:

  • Схема. Вероятно, самый чистый из всех диалектов. Несомненно, что The Little Schemer был переведен из LISP в схему. Стандартная спецификация пятой схемы, R5R2, является прекрасным образованием сама по себе; это может быть самая приятная спецификация языка и библиотеки, которую я когда-либо читал, а также кратчайшие, которые достаточно полные. Платформа PLT Scheme включает довольно приличный интерпретатор и компилятор, хороша для сценариев, а также имеет некоторые визуальные инструменты, которые делают ее отличной для обучения.

  • Общий Lisp. Вероятно, самый портативный и всеобъемлющий вариант, это, скорее всего, то, что вы хотите, если хотите писать такие вещи, как коммерческое программное обеспечение. Стандарт определяет обширные библиотеки, и многое другое доступно за его пределами, оно CLOS, которое, вероятно, научит вас больше об OO, чем любое OO язык может, и некоторые из компиляторов очень хороши. К недостаткам относятся некоторые бородавки, которые отсутствуют у Схемы (например, наличие отдельного пространства имен для переменных, относящихся к функциям), а не как чистое и простое (как в случае с чем-либо, что должно было иметь расширения и требовать компромиссов для больших приложений в реальном мире), не имея гигиенических макросов и подчеркивая рекурсию гораздо меньше, чем схема.

  • Clojure.. Это работает на JVM, что может дать ему преимущество перед разработчиками Java. Он получил несколько бородавок (например, вы должны явно запросить оптимизацию хвостовых вызовов, хотя это может измениться в один день, если TCO добавляется в JVM). Макросы, хотя и не гигиенические, имеют некоторые функции, которые помогут вам избежать захвата переменных, поэтому вы можете захватывать переменные, если хотите, при меньшем риске случайного действия, чем в CL. У вас есть легкий доступ ко всем библиотекам Java; что, вероятно, хорошо для кода "реального мира" и довольно бессмысленно с точки зрения обучения. Он получил набор библиотек для постоянных структур данных и поддержку STM, что делает его очень интересным с одновременной точки зрения; это, вероятно, лучше всего, если вам интересно узнать больше о новых методах работы с параллельным и параллельным программированием. Похоже, что Clojure применим для больших производственных приложений как Java, в том смысле, что он будет иметь возможность делать "уродливые вещи", которые вы делаете в производственных приложениях, которые вы бы не хотели делать, t, когда вы учитесь.

  • Emacs Lisp. В терминах LISP это не один из лучших примеров. Одной из самых больших ошибок является динамическое масштабирование, но есть и многие другие. Однако, если вы являетесь пользователем Emacs, это может быть самый мощный инструмент, который вы можете научиться улучшать использование редактора. Насколько вы действительно научились изучать Emacs LISP, помимо того, как продлить Emacs, для меня является открытым вопросом; Я не знаю, как часто в Emacs Lisp действительно используются интересные методы, такие как функции высокого порядка.

Ответ 2

Я бы сказал, что Scheme исключительно из-за Little Schemer, которая является одной из самых увлекательных, но чрезвычайно трудных книг, когда-либо пытался прочитать.

Ответ 3

Также Clojure набирает много разума в эти дни, и не зря. Отличные структуры данных, очень хорошая поддержка concurrency (помещает Scheme и CL в позор в этом отношении) и большое сообщество. Он также относительно прост, CL как минимум сложнее С++.

Это не значит, что мне не нравится CL или Scheme. Я изучил схему с SICP. И CL привел меня к Clojure. Я полагаю, все зависит от ваших целей. Если вы хотите изучить Lisp, который очень практичен, перейдите к Clojure. В противном случае CL ​​или Scheme оба великолепны.

Ответ 4

Я могу порекомендовать Common Lisp на SBCL. Эта комбинация быстрая, мощная, зрелая и хорошо документированная.

Ответ 5

Я предпочитаю CL, поскольку мне нравится объектно-ориентированное программирование, а CLOS - самая красивая система объектов.

Ответ 6

Я изучил Scheme в школе. Это был отличный учебный опыт, и я никогда не забуду основы функционального программирования. Вероятно, неважно, какую версию LISP вы заберете, если вы понимаете суть ее полезности - математическое исчисление без апатии.

Здесь интересная статья о Почему MIT переключился с Scheme на Python в своем вводном курсе программирования.

Ответ 7

Я бы сказал, все они, по крайней мере, сначала. В конце концов вы, вероятно, разработаете предпочтение Scheme или Common Lisp, но у них обоих есть достаточно различий, что лучше всего получить дескриптор всего, что там есть.

У схемы есть продолжения, например, и хорошо узнать о них на Схеме, хотя они могут быть реализованы в Common Lisp.

Изучение разницы между лексической и динамической областью важно, и если вы изучите как Common Lisp, так и elisp, вы столкнетесь с последствиями обоих.

Ответ 8

LFE (Lisp Flavored Erlang) будет приятным. У вас может быть синтаксис lisp поверх виртуальной машины Erlang.

Ответ 9

Был как бы "загруженным" вопросом, но OP, вероятно, не знал об этом. Как правило, Common и Scheme lispers похожи на ПК и компьютеры Apple "люди", они не смешиваются. Какой из них лучше, вероятно, не так уместен, как то, что "работает" для вас. На самом деле, нет большой разницы. Вероятно, предпочтение от одного над другим, возможно, зависит от того, чему вы сначала научитесь. (Для меня пустой список должен быть "ничем", известным в CL как NIL, и это делает меня Common Lisper.) Мне нравится интеграция SBCL со Slime с использованием EMACS, но SBCL не для всех. Во-первых, SBCL очень строг. Если вы просто хотите "повеселиться", GNU clisp легко и доступно практически для каждой платформы.