Лисп, как вы обнаружили, не является одним языком; это семейство языков, которые имеют определенные общие черты.
Существует два основных диалекта Лиспа: Общий Лисп и Схема. Каждый из этих двух диалектов имеет много реализаций, каждая со своими особенностями. Однако Common Lisp и Scheme стандартизированы, и стандарты определяют определенный базовый набор функций, которые можно ожидать от любой реализации.
Схема - это минималистичный язык с очень маленькой стандартной библиотекой. Он используется в основном студентами и теоретиками. Common Lisp имеет гораздо больше языковых возможностей и значительно большую стандартную библиотеку, включая мощную объектную систему, и используется в больших производственных системах.
Clojure - еще один второстепенный, более поздний диалект. Если вы хотите понять Lisp, вам лучше сначала изучить Common Lisp или Scheme.
Я рекомендую сначала изучить схему; это более чистое выражение идей, из которых сделан Lisp, и поможет вам понять суть языка. Во многих отношениях Lisp полностью отличается от Java и других императивных языков; однако то, что вы узнаете из этого, сделает вас лучшим программистом в этих языках. Вы можете легко выучить Common Lisp после того, как узнаете Scheme.
Преимущество Lisp, проще говоря, в том, что он более мощный , чем другие языки. Весь код Lisp является данными Lisp и может быть обработан как таковой; это позволяет вам делать действительно классные вещи с метапрограммированием, которые просто невозможно сделать на других языках, потому что они не дают вам прямого доступа к структурам данных, которые составляют ваш код. (Причина, по которой Лисп может это сделать, а они не могут, тесно связана с его странным синтаксисом. Каждый компилятор или интерпретатор после прочтения исходного кода должен перевести его в деревья абстрактного синтаксиса . В отличие от других языков Синтаксис Lisp является прямым представлением AST, в которые транслируется код Lisp, так что вы знаете, как выглядят эти деревья, и можете напрямую ими манипулировать.) Наиболее часто используемая функция метапрограммирования - это макросы; Макросы Lisp могут буквально перевести немного исходного кода во все, что вы можете программировать. Вы не можете сделать это, скажем, с макросами C.
«Быстрее в разработке и исполнении», возможно, была ссылка на одну особенность, которую обеспечивает большинство реализаций Lisp: цикл read-eval-print. Вы можете ввести выражение в приглашение, и интерпретатор оценит его и напечатает результат. Это замечательно как для изучения языка, так и для отладки или иного исследования кода.
Лисп динамически типизирован (хотя статически типизированные разновидности существуют). Большинство реализаций Lisp работают на собственной виртуальной машине; однако, многие также могут быть скомпилированы в машинный код. Clojure был написан специально для JVM; он также может быть нацелен на .NET и JavaScript.
Хотя Лисп изначально был создан для исследований ИИ, он ни в коем случае не предназначен исключительно для ИИ. Основная причина, по которой он не более популярен в основных производственных средах (кроме самодостаточного доминирования Java и C #), заключается в поддержке библиотек. Common Lisp имеет много хороших библиотек (схема меньше), но он бледнеет по сравнению с огромным количеством библиотечной поддержки, доступной для Java или Python.
Если вы хотите начать, я рекомендую скачать Racket , очень популярную реализацию Scheme. В нем есть все, что вам нужно, в том числе простая, но очень мощная IDE с циклом read-eval-print, прямо из коробки. Первоначально разработанный как учебный язык, он поставляется с очень большой стандартной библиотекой, более характерной для Common Lisp, чем для Scheme. В результате он видит применение в реальных производственных средах.