Циклопедия скорбит по жертвам террористического акта в Крокус-Сити (Красногорск, МО)

Лисп

Материал из Циклопедии
(перенаправлено с «Lisp»)
Перейти к навигации Перейти к поиску

Лисп, Lisp, изначально — язык программирования LISP (от “List Processing”,) опубликованный в 1958 году. В нынешнем виде — формальный принцип построения высокоуровневых языков программирования и семейство так называемых диалектов Лиспа — языков и их реализаций, следующих данному принципу. Среди диалектов ныне популярны Common Lisp, Clojure и Scheme; независимо развиваются также диалекты newLISP, Qi и ряд других.

Общее свойство всех диалектов — гомоиконность. Код пишется и считывается, как линейный список, элементы которого суть либо ничего (пустой список), либо символы (назначенные средой или по таблице символов), либо, в свою очередь, списки (рекурсия). Операции же анализа линейных списков символов — в самой основе языка:

(atom a)
(eq a b)
(cons a b)
(car (cons a b))
(cdr (cons a b))
(cond (if-expr then-expr) (...))
(quote a)

— соответственно, проверка символа на атомарность, сравнение символов по значению, операция сцепления символов в пару, две операции анализа пар, условный оператор, оператор отмены вычисления («передать сам символ, не вычисляя его»).

Операторы — префиксные структуры символов внутри списков, отделяемых круглыми скобками: (например, это вызов…) …функции «например,» с параметрами-символами «это» и «вызов…».

Операция вычисления любых составных выражений (начиная с функций) называется извлечение оценки, англ. evaluation, и её реализация выразима целиком лишь через вышеуказанные семь операций, образующих как бы аксиоматическую основу Лиспа.[1]. Самим языком также выразима операция применения функции к передаваемым по ссылке параметрам, apply.

На символьных таблицах основан механизм назначения переменных и функций, defun в CL или define в Scheme.

Наследие лямбда-исчисления — оператор lambda, возвращающий анонимную функцию. Пример — реализация куайна:

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

Типы[править]

Типизация в Лисп-языках обычно динамическая, но статические типы до той или иной степени поддержаны в CL[2], Clojure[3] и, например, в Racket[4].

Область видимости[править]

Три перечисленных диалекта соблюдают лексическую область видимости переменных, в newLISP она по умолчанию динамическая, но лексическое замыкание обеспечиваются первичным языковым механизмом «контекстов».

История[править]

Изобретённый Джоном Маккарти в год выхода языка Фортран, 1957, Лисп — первый или же второй по возрасту язык программирования высокого уровня, используемый поныне: суждение зависит от того, считать ли Фортран высокоуровневым и/или используемым поныне.


<references>

  1. Paul Graham, The Roots of Lisp
  2. CL HyperSpec: declare, type &c.
  3. Datatypes
  4. См. Typed Racket