Лисп

Материал из Циклопедии
(перенаправлено с «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, Лисп — первый или же второй по возрасту язык программирования высокого уровня, используемый поныне: суждение зависит от того, считать ли Фортран высокоуровневым и/или используемым поныне.

Источники[править]

  1. ↑ Paul Graham, The Roots of Lisp
  2. ↑ CL HyperSpec: declare, type &c.
  3. ↑ Datatypes
  4. ↑ См. Typed Racket
 
Используемые
в разработке

Ада • A+ • APL • Atlast Forth • AWL • Язык ассемблера • ActionScript • ABAP/4 • AutoIt • AWK • BeanShell • Бейсик • Си • Кобол • C++ • C# • Cω • Clarion • Clojure • ColdFusion • Common Lisp • D • dBase • Delphi • DuAL • Eiffel • Erlang • Euphoria • F# • Форт • Фортран • Gambas • Go • Groovy • HAL/S • Haskell • IBM PL/S • Icon • Iridium • Java • JavaScript • Limbo • Lua • Модула-3 • Object Pascal • Objective-C • OCaml • Oz • Parser • Паскаль • Компонентный Паскаль • Perl • Pixilang • PHP • PowerBASIC • Python • ПЛ/1 • Пролог • Qi • Ruby • Scala • Scheme • Seed7 • Smalltalk • SQL • PL/SQL • Tcl • TouchDesigner • Vala • Visual Basic (.NET) • X-Robot

Академические

Agda • Clean • Curry • Idris • Лого • ML • Оберон • Planning C • РЕФАЛ • Симула •

IEC 61131-3

Instruction List • ST • FBD • Ladder Diagram (LD) • SFC

Прочие

Алгол • Алгол 68 • Модула-2 • Миранда • Hope • НОРМИН • Санда

Эзотерические

HQ9+/HQ9++ • INTERCAL • Brainfuck • Befunge • Malbolge • Piet • Spoon • Unlambda • Whitespace • FALSE • LOLCODE • Глагол

Визуальные

G (LabVIEW) • Microsoft VPL • Sikuli • VisSim • Алиса • ДРАКОН • Скретч

Прочее

Динамические • Для создания компьютерных игр • Компилируемые • С ключевыми словами не на английском языке • С C-style синтаксисом • Синтаксис • Системное программное обеспечение • YoptaScript

Категория Языки программирования