Ответ 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 действительно используются интересные методы, такие как функции высокого порядка.