Lisp
Материал из Xgu.ru
- Эта странца посвящена языку программирования Lisp. Возможно, вас интересует Locator/ID Separation Protocol
Lisp — первоначально язык программирования, а теперь семейство языков программирования, обладающих определёнными характерными чертами. На данный момент используется множество различных диалектов Lisp'а, из которых можно выделать несколько основных: Common LISP, Scheme и сравнительно новый, но уже очень популярный диалект, Clojure.
Восемь характеристик[1][2], которые отличают Лисп от других языков[3]:
- Встроенная поддержка списков;
- Автоматическое управление памятью;
- Динамическая типизация;
- Функции первого класса (first class functions);
- Единообразный синтаксис;
- Интерактивная среда;
- Расширяемость;
- История.
Содержание |
[править] Диалекты LISP
У Лиспа есть два основных диалекта:
- Common LISP — более навороченный (Будда большой, весёлый, с волосатыми подмышками);
- Scheme — более ясный и простой (Будда маленький, аккуратный и улыбается);
Три важных признака, отличающих Scheme от CL:
- наличие функции call-with-current-continuation, которая позволяет сделать переход в коде, а потом вернуться назад, с восстановлением сохранённого состояния;
- хвостовая рекурсия;
- гигиеничные макросы.
Кроме этого, есть ещё один, сравнительно недавно появившийся и ставший особенно популярным в последнее время, диалект:
- Clojure, LISP-диалект с поддержкой макросов, ориентированный на использование с JVM.
[править] Примеры кода
Самая простая программа:
#!/usr/bin/clisp (print "Hello, world")
Вычисление факториала (использование рекурсии):
#!/usr/bin/clisp (defun fact (x) (cond ((eq x 1) 1) (t (* x (fact (- x 1)))))) (print (fact 5))
[править] Юмор
По музыкальной классификации языков[4] Лисп можно сравнить с прогметаллом (я бы даже сказал — с прогроком).
[править] Дополнительная информация
[править] Идеологическая база
Что можно почитать, если вы хотите убедиться, что Lisp стоит выучить:
- Beating the Averages (англ.) — статья Пола Грехема (Paul Graham), который рассказывает почему Лисп стоит использовать в стартапах; и как с его помощью вы сразу начнёте обгонять конкурентов
- The Nature of Lisp (англ.) — объяснение на примере современных технологий и инструментов, показывающее что Лисп очень мощный и интересный язык
- Why Lisp macros are cool, a Perl perspective (англ.) — почему макросы в Лиспе это круто, от автора книги High-Order Perl
Что можно почитать, если вы думаете, что, наверное, вам лучше пока не связываться с Лиспом:
- On the Relationship Between Python and Lisp (англ.) — рассказ о том, что Python совсем не пытается догнать и перегнать Lisp, а идёт своей дорогой
- How I lost my Faith (англ.) — история Эранна Гата (Erann Gat), в которой он рассказывает, как он понял, что Lisp — не самый крутой язык на свете
- Lisping at JPL (англ.) — опять Эранн Гат (Erann Gat); история успеха и падения Лиспа в JPL (Jet Propulsion Labs); как писали на лиспе код для марсоходов и удалённо правили ошибки на станции Deep Space 1, летевшей на расстоянии 100 миллионов миль от Земли; и потом как всё это печально кончилось, что Лисп в JPL оказался никому не нужным. "I can't even say the word Lisp without cementing my reputation as a crazy lunatic who thinks Lisp is the Answer to Everything. So I keep my mouth shut (mostly) and watch helplessly as millions of tax dollars get wasted."
[править] Микрообзоры и заметки
- Before you start learning Lisp (англ.) — несколько маленьких фактов, которые желательно иметь в виду, перед тем как начинать пробовать играться с Лиспом
- A Quickstart to Common Lisp (англ.) — маленькое введение в Lisp, рассмотрено несколько простейших конструкций, приведён небольшой список инструментов, с которых можно начать
[править] Руководства по использованию
- The Revised6 Report on the Algorithmic Language Scheme (англ.) — стандарт языка Scheme
- Basic Scheme (англ.) — простейшее введение в Scheme, рассчитанное на тех, кто собирается писать модули расширения для GIMP; подойдёт любому начинающему разбираться с Scheme; рассмотрены только самые простейшие вещи
- Common Lisp the Language (англ.), Guy L. Steele Jr.
[править] Форматирование и оформление кода
Q: How can you tell when you've reached Lisp Enlightenment?
A: The parentheses disappear.
|
- Riastradh's Lisp Style Rules, Taylor R. Campbell (англ.) — правила по форматированию и оформлению кода на Лиспе; общепринятый и собственные правила и рекомендации автора
- 4. Syntax and Semantics (англ.) — глава книги Practical Common Lisp
[править] Среды разработки
- limp (англ.) — модуль расширения к Vim, с помощью которого можно писать и отлаживать программы на Лиспе; что-то типа SLIME, но для Vim (не забудьте filetype plugin on)
[править] Книги по Лиспу
- On Lisp, Paul Graham
- ANSI Common Lisp, Paul Graham
- Practical Common Lisp
- Practical Common Lisp (англ.), видео
- Lisp in Small Pieces — как писать компиляторы и интерпретаторы Лисп
- Structure and Interpretation of Computer Programs — по Схеме
- Structure and Interpretation of Computer Programs (англ.), видео
- The Little Schemer — ещё по Схеме
- The Seasoned Schemer — ещё по Схеме
- The Reasoned Schemer — логическое программирование на Схеме
[править] Сравнение Lisp и Scheme между собой и с другими языками
- Python vs. Scheme (англ.)
- Differences between Scheme and Common Lisp (англ.)
[править] Lisp как средство для изучения программирования
- mal — Make a Lisp, очень интересный проект: интерпретатор Lisp на множестве языков
[править] Примечания
- ↑ по мнению Питера Норвига, изложенному в труде Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp
- ↑ И девять других (хотя и не совсем других) по мнению Пола Грехема
- ↑ но не от всех, конечно же; например в Perl из этих восьми отличий остаётся только одно
- ↑ http://piranha.org.ua/blog/2008/05/10/musical-languages/