Lisp

Материал из Xgu.ru

Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.


Эта странца посвящена языку программирования Lisp. Возможно, вас интересует Locator/ID Separation Protocol

Lisp — первоначально язык программирования, а теперь семейство языков программирования, обладающих определёнными характерными чертами. На данный момент используется множество различных диалектов Lisp'а, из которых можно выделать несколько основных: Common LISP, Scheme и сравнительно новый, но уже очень популярный диалект, Clojure.

Восемь характеристик[1][2], которые отличают Лисп от других языков[3]:

  1. Встроенная поддержка списков;
  2. Автоматическое управление памятью;
  3. Динамическая типизация;
  4. Функции первого класса (first class functions);
  5. Единообразный синтаксис;
  6. Интерактивная среда;
  7. Расширяемость;
  8. История.

Содержание

[править] Диалекты 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.

  • Anonymous
  • 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
  • Lisp in Small Pieces — как писать компиляторы и интерпретаторы Лисп
  • Structure and Interpretation of Computer Programs — по Схеме
  • The Little Schemer — ещё по Схеме
  • The Seasoned Schemer — ещё по Схеме
  • The Reasoned Schemer — логическое программирование на Схеме

[править] Сравнение Lisp и Scheme между собой и с другими языками

[править] Lisp как средство для изучения программирования

  • mal Github.png — Make a Lisp, очень интересный проект: интерпретатор Lisp на множестве языков

[править] Примечания

  1. по мнению Питера Норвига, изложенному в труде Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp
  2. И девять других (хотя и не совсем других) по мнению Пола Грехема
  3. но не от всех, конечно же; например в Perl из этих восьми отличий остаётся только одно
  4. http://piranha.org.ua/blog/2008/05/10/musical-languages/
Источник — «http://xgu.ru/wiki/Lisp»