Lisp

Lisp
Лисп
Семантика:

мультипарадигмальный: объектно-ориентированное, функциональное, процедурное программирование

Появился в:

1958 г.

Автор(ы):

Джон Маккарти

Типизация данных:

сильная, динамическая

Диалекты:

Common Lisp (CLOS), Scheme, Arc, Clojure, BEE Lisp,
языки расширения: AutoLisp и ELisp

Повлиял на:

Io, Nemerle, Python, Ruby, Smalltalk, Лого

Лисп (LISP, от англ. LISt Processing language — «язык обработки списков»; современное написание: Lisp) — семейство языков программирования, программы и данные в которых представляются системами линейных списков символов. Лисп является вторым в истории (после Фортрана) используемым по сей день высокоуровневым языком программирования. Создатель Лиспа Джон Маккарти занимался исследованиями в области искусственного интеллекта (в дальнейшем ИИ) и созданный им язык по сию пору является одним из основных средств моделирования различных аспектов ИИ.

Традиционный Лисп имеет динамическую систему типов. Язык является функциональным, но многие поздние версии обладают также чертами императивности, к тому же, имея полноценные средства символьной обработки становится возможным реализовать объектно-ориентированность, примером такой реализации является платформа CLOS.

Язык Лисп, наряду с языком Ada, прошел процесс фундаментальной стандартизации для использования в военном деле и промышленности, в результате чего появился стандарт Common Lisp. Его реализации существуют для большинства платформ.

Одной из базовых идей языка Lisp является представление каждого символа как узла многокоординатной символьной сети; при этом координаты, свойства, уровни сети записаны в так называемых слотах символа. Основные слоты:

  • имя символа (основополагающее Аристотелево А=А из которого вырастает лямбда-исчисление),
  • функциональный слот,
  • слот-значение
  • расширяемый список свойств (можно свободно расширить слотовую систему удобным для решения задачи способом).

Язык Лисп является языком системного программирования для так называемых Лисп-машин, производившихся в 80-е годы, например, фирмой Symbolics.

Содержание

Синтаксис

Основной механизм языка Лисп — инкапсулированная в список определяющая голова списка и подключённый к ней хвост списка, который рекурсивно также может быть списком. Лисп-машина способна воспринимать каждый поступающий на неё список на самом абстрактном уровне, например как мета-Лисп-машину, модифицирующую воспринимающую машину. В такой динамичной, высокоабстрактной среде можно реализовать как строго научные системы, так и неисчислимое множество программистских трюков и генераторов всевозможных машин.

Любая программа на языке Лисп состоит из последовательности выражений (форм). Результат работы программы состоит в вычислении этих выражений. Все выражения записываются в виде списков — одной из основных структур Лиспа, поэтому они могут легко быть созданы посредством самого языка. Это позволяет создавать программы, изменяющие другие программы или макросы, позволяющие существенно расширить возможности языка.

Внешне исходный код программы на Лиспе отличается обилием круглых скобок; редактирование программ значительно упрощается использованием текстового редактора, поддерживающего автоматическое выравнивание кода, подсветку соответствующих пар скобок и такие специальные команды, как «закрыть все открытые скобки», «перейти через список вправо» и т. д.[1]

Список является последовательностью элементов любого рода, в том числе других списков. Например, (1 3/7 'foo #'+) состоит из целого числа, рациональной дроби, символа foo и указателя на функцию сложения. Выражения представляются списками в префиксной записи: первый элемент должен быть формой, то есть функцией, оператором, макросом или специальным оператором; прочие элементы — аргументы этой формы, передаваемые форме для обработки. Функция list возвращает список состоящий из её аргументов: например, (list 1 3/7 'foo #'+) возвращает список, упомянутый ранее. Если некоторые элементы являются выражениями, то сначала вычисляется их значение: (list 1 2 (list 1 2)) возвращает (1 2 (1 2)). Арифметические операторы записываются по тому же принципу, например (+ 4 (* 2 3)) выдаёт 10.

Специальные операторы позволяют управлять последовательностью вычислений. С их помощью реализуются ветвления и циклы. Оператор if позволяет вычислить одно из двух выражений в зависимости от выполнения условия, которое тоже является выражением. Если его результат не ЛОЖЬ (не nil), то вычисляется первый аргумент, иначе — второй. Например, (if nil (list 1 2 "foo") (list 3 4 "bar")) всегда возвращает (3 4 "bar").

Синтаксис в форме Бэкуса — Наура:

s_expression ::= atomic_symbol | "(" s_expression "." s_expression ")" | list

list ::= "(" s_expression { s_expression } ")"

atomic_symbol ::= letter atom_part

atom_part ::= empty | letter atom_part | number atom_part

letter ::= "a" | "b" | " ..." | "z"

number ::= "1" | "2" | " ..." | "9"

empty ::= " "

Примеры

Пример программы, выводящей сообщение "Hello, world!":

(format t "Hello, world!~%")

Пример Куайн (программы, выводящей свой исходный код) на Лиспе:

((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))

Данная программа должна работать на большинстве диалектов Лиспа, в том числе и на Scheme.

Итеративная версия функции определения N-го числа Фибоначчи с использованием макроса Loop:

(defun fibonacci (n)
    (loop repeat (+ n 1)
          for a = 1 then b 
          and b = 1 then (+ a b)
          finally (return a)))

Рекурсивная версия функции N-го числа Фибоначчи:

(defun fibonacci(n)
    (if (or (= n 0) (= n 1))
     1
     (+ (fibonacci (- n 1)) (fibonacci (- n 2)))))

Применение

Первые области применения языка Лисп были связаны с символьной обработкой данных и процессами принятия решений.

Наиболее популярный сегодня диалект Common Lisp является универсальным языком программирования. Он широко используется в самых разных проектах: Интернет-серверы и службы, серверы приложений и клиенты, взаимодействующие с реляционными и объектными базами данных, научные расчёты и игровые программы.

Одно из направлений использования языка Lisp — его использование в качестве скриптового языка, автоматизирующего работу в ряде прикладных программ:

  • язык Лисп используется как язык сценариев в САПР AutoCAD (диалект AutoLISP);
  • его диалект — SKILL — используется для написания скриптов в САПР Virtuoso Platform компании Cadence Design Systems;
  • язык Лисп является одним из базовых средств текстового редактора Emacs (диалект EmacsLISP)[2];
  • язык Лисп используется как язык сценариев в издательском программном обеспечении Interleaf/Quicksilver (диалект Interleaf Lisp);
  • в оконном менеджере Sawfish применяется специальный диалект Лиспа Rep, который в значительной степени повторяет диалект Лиспа от Emacs;
  • диалект Scheme используется в качестве одного из скриптовых языков в графическом процессоре Gimp;
  • диалект GOAL используется для высокодинамичных трёхмерных игр;
  • язык Лисп может использоваться для написания скриптов в аудиоредакторе Audacity.

Сферы применения языка Лисп многообразны: наука и промышленность, образование и медицина, от декодирования генома человека до системы проектирования авиалайнеров.

Интересные факты

  • Существуют альтернативные расшифровки названия LISP: Lots of Irritating Superfluous Parentheses[3] («Много раздражающих лишних скобок») или Lost In Stupid Parentheses — намёки на особенности синтаксиса.

Примечания

  1. Заблуждения относительно Лисп. — статья, своего рода «вольный перевод» 1 главы из книги Successful Lisp Дэвида Лэмкинса. Архивировано из первоисточника 22 августа 2011.
  2. По сути, большая часть Emacs написана на EmacsLISP, что даёт неограниченные возможности расширения функциональности
  3. The Jargon File — Lisp (англ.)

Литература

Ссылки

  • pcl.catap.ru — русский перевод книги en:Practical Common Lisp  (англ.)
  • Cookbook — русский перевод (незаконченный) сборника рецептов Common Lisp Cookbook  (англ.)
  • lisp.ru — ресурсы по языку Лисп (учебники, статьи).
  • lisper.ru — сайт, посвящённый Common Lisp, написанный на самом Common Lisp
  • lisp.ystok.ru — Лисп у «Истоков» (литература, ссылки, проекты с исходным кодом)
Ссылки на английском
  • gigamonkeys.com — сайт книги en:Practical Common Lisp, откуда может быть скачана электронная версия (pdf) и архив с исходными кодами для книги
  • Cliki — вики-ресурс о библиотеках и проектах Common Lisp. Примечательно, что сам ресурс написан полностью на Common Lisp.
  • common-lisp.net — основной хостинг Common Lisp проектов.
  • lisp.org — ассоциация пользователей Лисп
  • Архивы списков рассылки на Gmane.

Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать реферат

Полезное


Смотреть что такое "Lisp" в других словарях:

  • Lisp — Información general Paradigma multiparadigma: orientado a objetos, funcional, declarativo Apareció en 1958 Diseñado por John McCarthy …   Wikipedia Español

  • LISP — Paradigmen: multiparadigmatisch: funktional, prozedural; manche Dialekte außerdem modular, objektorientiert, reflexiv Erscheinungsjahr: 1958 Designer: John McCarthy …   Deutsch Wikipedia

  • Lisp — Paradigmen: multiparadigmatisch: funktional, prozedural; manche Dialekte außerdem modular, objektorientiert, reflexiv Erscheinungsjahr: 1958 Designer …   Deutsch Wikipedia

  • LISP — Apparu en 1958 Auteur John McCarthy Paradigmes fonctionnel, impératif …   Wikipédia en Français

  • LISP — /lisp/, n. Computers. a high level programming language that processes data in the form of lists: widely used in artificial intelligence applications. [lis(t) p(rocessing)] * * * Powerful computer programming language designed for manipulating… …   Universalium

  • LISP — 〈EDV; Abk. für engl.〉 List Processing Language, eine höhere Programmiersprache, verbreitet zur Be u. Verarbeitung von Listen u. im Bereich der künstlichen Intelligenz * * * LISP   [Kurzwort aus englisch list processing language], Informatik: von… …   Universal-Lexikon

  • lisp — [ lisp ] n. m. • v. 1960; mot angl., acronyme de List Processing « traitement de listes » ♦ Inform. Langage évolué orienté vers le traitement d expressions symboliques. Le lisp est utilisé en intelligence artificielle. ● LISP nom masculin… …   Encyclopédie Universelle

  • Lisp — Lisp, v. t. 1. To pronounce with a lisp. [1913 Webster] 2. To utter with imperfect articulation; to express with words pronounced imperfectly or indistinctly, as a child speaks; hence, to express by the use of simple, childlike language. [1913… …   The Collaborative International Dictionary of English

  • lisp´er — lisp «lihsp», verb, noun. –v.i. 1. to use the sound of th in thin and then instead of the sound of s in bus and is when speaking: »A person who lisps might say, “Thing a thong of thixpenth” for “Sing a song of sixpence.” …   Useful english dictionary

  • Lisp — Lisp, n. The habit or act of lisping. See {Lisp}, v. i., 1. [1913 Webster] I overheard her answer, with a very pretty lisp, O! Strephon, you are a dangerous creature. Tatler. [1913 Webster] …   The Collaborative International Dictionary of English

  • lisp — [lısp] n [singular] [: Old English; Origin: wlyspian] a fault in the way someone speaks which makes them pronounce s sounds as th ▪ She speaks with a slight lisp. >lisp v [I and T] …   Dictionary of contemporary English


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»