Несколько вопросов, которые могут возникнут у новичка, обратившего внимание на Lisp
В самом деле зачем? Это же "архаичный, академический язык", на нём "никто не программирует", "он не востребован среди работодателей." Эти и подобные им высказывания, нередко можно услышать от людей вовсе незнакомых с lisp или в лучшем случае, когда-то немного слышавшими о нём в институте, от чего у них осталось лишь впечатление языка с огромным количеством скобок.
На самом деле всё не так. Lisp - современный высокоуровневый язык, на нём писались и пишутся и разные достаточно серьёзные системы и вещи попроще, навроде скриптов в разных средах, хотя есть конечно области, где Lisp применять было бы неразумно, например, для реализации вычислительных методов. Отчасти верны лишь слова про работодателей. Действительно, Lisp сейчас применяется не так широко. Попытки ответить на вопрос "почему" выходят далеко за рамки F.A.Q., но на взгляд составителя огромную роль играет просто банальное незнание его возможностей и имеющихся инструментов. Тем не менее, есть и серьёзные работодатели у которых знание Lisp прямо указано в требованиях к вакансиям.
Кроме того, многие, изучившие Lisp, отмечают, что полученное знание помогает им лучше писать программы даже на других языках, в том числе на C++.
Многих к изучению и использованию лиспа вдохновила статья Пола Грэма "Побеждая посредственность" http://www.paulgraham.com/avg.html с русским переводом которой можно ознакомится на http://www.nestor.minsk.by/sr/2003/07/30710.html в которой описывается, как фактически именно лисп стал "секретным оружием" успешного стартапа Viaweb, позднее приобретённого Yahoo.
Со времени первоначального Lisp, созданного в 1958 году Джоном Маккарти (John McCarthy), прошло уже много лет и сейчас имеется несколько диалектов и родственных языков. Среди наиболее важных диалектов можно назвать Common Lisp и Scheme, первый является ANSI стандартом языка Lisp номер X3.226-1994, постепенно развившимся из первоначального варианта языка, а Scheme - диалект лиспа, созданный Гаем Стилом и Джеральдом Дж. Сассманом (Guy L. Steele и Gerald Jay Sussman), на который тоже существует стандарт R6RS, хотя наиболее распространённые реализации используют до сих пор его предыдущую версию R5RS
Также распространены диалекты elisp - Emacs Lisp, используемый в редакторах GNU/Emacs и XEmacs и AutoLisp, используемый в CAD-программе AutoCAD, выпускаемой Autodesk. По сравнению со стандартами, elisp и AutoLisp имеют серьёзные ограничения. Имеется и немало других диалектов и разновидностей языка, в том числе и по той причине, что даже разные трансляторы Common Lisp различаются в некоторых деталях реализации.
Подробное сравнение нескольких реализаций Common Lisp. (англ.)
Интерпретаторов и компиляторов Lisp и Scheme очень много большой список приведён на сайте Пола Грэма, здесь же приведён список, по мнению составителей F.A.Q., наиболее универсальных, популярных и доступных.
Свободные:
Проприетарные:
Свободные:
Поддерживающие R6RS:
Поддерживающие R5RS:
Примечание: большая часть этих реализаций не собирается поддерживать R6RS никогда. Подробности можно узнать здесь.
В известный графический редактор GIMP встроен скриптовый язык Script-Fu, являющийся усечённым вариантом Scheme, базирующемся на интерпретаторе TinyScheme.
Проприетарные:
Однозначно рекомендовать тот или иной компилятор/интерпретатор сложно, многое зависит от конкретных задач, но всё-таки, среди свободных реализаций стоит отметить CLISP и SBCL, CLISP более широко распространен и немного удобнее в работе, особенно в ходе обучения, SBCL часто быстрее CLISP и реализует ряд функциональных парадигм, не вошедших в стандарт Common Lisp, но чрезвычайно полезных, например, хвостовую (концевую) рекурсию. CMUCL более медленно развивается, но существует ряд полезных библиотек, ориентированных на него. GCL применяется, в частности, в системе компьютерной алгебры Axiom
на русском языке
К сожалению, книг по Lisp на русском языке очень мало. В основном они выпущены более 17 лет назад.
1.Хювёнен Э., Сеппянен Й. Мир Лиспа. В 2-х томах — М.: Мир, 1990 г.
Более-менее известная книга финских авторов, существует в электронном виде в электронных библиотеках.
2. Абельсон Харольд, Сассман Джеральд при участии Джули Сассман, Структура и интерпретация компьютерных программ — М.: Добросвет, "КДУ", 2006 г. Эта, де-факто культовая книга, собственно говоря, не о языке Scheme, а учебник по программированию, является переводом вводного курса по компьютерным наукам (Computer Science). Язык Scheme в ней служит языком на примере которого происходит обучение парадигмам и методам программирования.
Книга свободно доступна на английском языке: sicp также по ключевому слову sicp можно найти в интернете её перевод на русский язык.
Имеется блог, посвящённый изучению этой книги и решению задач из неё: sicp.sergeykhenkin.com
3.В.Водолазкий, Первые шаги в GNU Common Lisp — цикл статей о Lisp, опубликованный на сайте В.Водолазкого. Для примеров используется GCL.
4. Перевод на русский Practical Common Lisp -- работа еще в процессе, можно регистрироваться и переводить/вычитывать
5. Курс лекций функционального программирования. Морозов М.Н.
6. Выучите Scheme за считанные дни -- работа в процессе по переводу книги Teach Yourself Scheme in Fixnum Days
В поисках книг и статей по Lisp на русском языке можно обнаружить заметное количество документов по AutoLisp'у - диалекту языка Lisp, применяемом для пользовательского программирования конструкторских задач в AutoCAD. Их сложно рекомендовать для полноценного обучения Lisp'у по причине ограниченности самого AutoLisp'а, его заточенности под AutoCAD, следствием чего является ограниченность в использовании возможностей языка у авторов этих книг. В частности, такая фундаментальная возможность Lisp, как метапрограммирование практически выпадает в AutoLisp'е.
На английском языке
Основная документация, необходимая для серьёзного изучения Lisp'а имеется только на английском языке.
Начать изучение можно рекомендовать с книги Practical Common Lisp. В состав тарбола от CLISP в подкаталоге doc лежат два файла: Lisp-tutorial.txt и CLOS-guide.txt являющиеся соответственно введением в Lisp и в его ООП-расширение CLOS. Их вполне можно использовать для начального знакомства с языком и в качестве справки, но не стоит по ним систематически учиться.
Для более глубокого понимания математических основ Lisp следует обратить внимание на лямбда исчисление Чёрча.
Головешкин В.А., Ульянов М.В. Теория рекурсии для программистов. - М.ФИЗМАТЛИТ, 2006 г. В значительной мере эта книга основана как раз на лямбда исчислении Чёрча.
Проприетарные AllegroLisp и LispWorks поставляются со своими средами разработки.
Свободные среды:
Slime телепатией не обладает и ему надо как-то указать используемый компилятор Lisp, например, записав в файле настроек ~/.emacs следующее
(setq inferior-lisp-program "/usr/bin/sbcl")
После вызова Emacs, по команде M-x slime произойдёт запуск сервера cl-swank, использующего в данном случае SBCL
Для более тонкой настройки надо прочитать документацию по slime, идущую с ним в комплекте. Скорее всего она находится в /usr/share/doc/slime