Лисп
Лисп, 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>
- ↑ Paul Graham, The Roots of Lisp
- ↑ CL HyperSpec: declare, type &c.
- ↑ Datatypes
- ↑ См. Typed Racket