Семантика: |
мультипарадигмальный: объектно-ориентированный, функциональный, императивный, метаязык |
---|---|
Тип исполнения: | |
Появился в: | |
Автор(ы): | |
Типизация данных: |
сильная, динамическая, с опциональными декларациями типов |
Основные реализации: |
Allegro Common Lisp, ABCL, CLISP, Clozure CL, CMUCL, Corman Common Lisp, ECL, LispWorks, Scieneer CL, SBCL |
Испытал влияние: | |
Повлиял на: |
Common Lisp (сокр. CL) — диалект языка Лисп, стандартизированный ANSI[1]. Был разработан с целью объединения разрозненных на тот момент диалектов Лиспа. Доступно несколько реализаций Common Lisp, как коммерческих, так и свободно распространяемых.
Common Lisp — мультипарадигменный (то есть, поддерживающий несколько парадигм) язык программирования общего назначения. Он поддерживает комбинацию процедурного, функционального и объектно-ориентированного программирования.
Common Lisp включает в себя CLOS; систему Lisp макросов, позволяющую вводить в язык новые синтаксические конструкции, использовать техники метапрограммирования и обобщённого программирования.
Содержание |
Common Lisp использует S-выражения для обозначения как кода, так и данных. Вызовы функций и макросов являются списками, где первый элемент, или голова списка, является именем функции, а остальные, — «хвост» списка, — аргументами.
(+ 2 2) ; складывает 2 и 2, возвращая результат 4. (- 8 3) ; вычитает из восьми три, возвращая результат 5. (reverse "Здравствуй, мир!") ; переворачивает строку, возвращая «"!рим ,йувтсвардЗ"» ;; определения переменных и функций: (defvar *x*) ; Определяет переменную *x*, не присваивая ей какого-либо ; значения. Две звёздочки, являющиеся частью имени — принятый ; стандарт для именования динамических переменных. (setf *x* 42.1) ; присваивает переменной *x* значение с плавающей запятой 42,1. (defun square (x) ; Определение функции square, получающей один аргумент (* x x)) ; и возвращающей его квадрат. (square *x*) ; вызывает функцию square, передавая ей значение переменной *x* ; и возвращает её квадрат (1772,41). (let ((a 3)(b 4)) (+ a b)) ; Функция let создаёт локальные переменные, присваивает им значения ; (в данном случае переменной a присваивается значение 3, а b - 4), ; после чего вычисляет и возвращает результат функции ; (в данном случае 7). Переменные локальны, следовательно ; попытка посчитать значение (+ a b) вне тела let приведёт к ошибке.
Числовые типы включают в себя целые, дроби, числа с плавающей запятой и комплексные числа.[2] Common Lisp даёт возможность использовать большие числа для представления любых величин с большей точностью.
Литеры в Common Lisp не ограничены ASCII. Большинство современных реализаций поддерживают Юникод.
Понятие Символа довольно близко Лиспу, хотя, практически неизвестно в таком виде в других языках. В Лиспе символ — это уникальный объект из данных, включающих в себя: имя, значение, функцию, список свойств и пакет (пространство имён). Символы в Лиспе часто используются так же, как идентификаторы в других языках: для хранения значения переменной. Однако, у них есть множество других применений. Обычно, когда символу присваивается значение, оно тут же им и возвращается. Некоторые символы присваивают значение сами себе, так, например, булевы значения представлены в качестве двух самоопределяющихся символов, — T и NIL.
Есть несколько функций для округления скалярных типов разными способами. Функция round округляет аргумент до ближайшего целого числа, а если число стоит «посередине», то до ближайшего чётного. Функция truncate округляет числа по направлению к нулю. Функции floor («пол») и ceiling («потолок») округляют к ближайшему меньшему и ближайшему большему числу соответственно. Все функции возвращают дробную часть в качестве вторичного результата.
Common Lisp отличается от таких языков, как C#, Java, Perl, Python тем, что он определяется своим стандартом и не существует его единственной или канонической реализации. Любой желающий может ознакомиться со стандартом и создать свою собственную реализацию. Common Lisp автоматически признаёт эти типы как равные.[3]
Название | Поддерживаемые платформы | Компиляция | Возможности | Лицензия |
---|---|---|---|---|
CLISP[6] | Windows, Mac, *nix | Байт-код, JIT | Маленький размер образа лисп-системы. Очень эффективная длинная целочисленная арифметика. Возможность создания исполняемых файлов. FFI(интерфейс для вызова низкоуровневых функций(функций из библиотек, написанных на Си и т. п.) и для оперирования «неуправляемой» памятью). Функции обратного вызова(интеграция с «родным» кодом платформы). | GNU GPL |
CMUCL[7] | Linux, FreeBSD, Solaris, Darwin | Байт-код, машинный код | Высококачественный компилятор в машинный код. FFI. Функции обратного вызова(интеграция с «родным» кодом платформы). | Общественное достояние с частями под BSD License |
ECL | Windows, *nix, Mac OS X | Байт-код, машинный код через C | Хорошая интеграция с программами на Си и с «родным» кодом платформы(FFI, функции обратного вызова, возможность создания «родных» для платформы динамических и статических библиотек). Возможность создания исполняемых файлов. «Родная» многопоточность на всех поддерживаемых платформах. | GNU GPL с частями под другими лицензиями |
Clozure CL (бывший OpenMCL)[8] | Linux/PPC, Linux/X86-64, Darwin/PPC, Darwin/X86-64, FreeBSD/X86-64, Windows | Машинный код | Быстрый компилятор. Мощный и удобный FFI. Функции обратного вызова(интеграция с «родным» кодом платформы). Возможность создания исполняемых файлов. «Родная» многопоточность на всех поддерживаемых платформах. | LGPL |
SBCL[9] | Linux, BSD, Solaris, Mac OS X (Darwin), Windows (экспериментально) | Машинный код | Высококачественный компилятор в машинный код. Возможность создания исполняемых файлов. FFI. Функции обратного вызова(интеграция с «родным» кодом платформы). «Родная» многопоточность на Linux, Solaris 10 и Mac OS X. | Общественное достояние с частями под MIT License и BSD License |
ABCL[10] | JVM | байт-код JVM | Интерфейс к платформе Java. Многопоточность. Платформонезависимость. | LGPL |
Allegro Common Lisp[11] | Windows, Unix, Linux, Mac OS X | Машинный код | http://franz.com/products/allegrocl/ | Коммерческая, доступна ограниченная демоверсия |
LispWorks[12] | Windows, *nix, Mac OS X | Машинный код | Высококачественная IDE. CAPI — библиотека для создания пользовательского интерфейса. Хорошая интеграция с программами на Си и с «родным» кодом платформы(FFI, функции обратного вызова, возможность создания «родных» для платформы динамических и статических библиотек). Возможность создания исполняемых файлов. «Родная» многопоточность на всех поддерживаемых платформах. Полный список возможностей: http://www.lispworks.com/products/features.html | Коммерческая, доступна ограниченная демоверсия |
Corman Common Lisp | Windows | Машинный код | http://www.cormanlisp.com/features.html | Shareware, исходный код системы (исключая IDE) доступен |
Это заготовка статьи о компьютерных языках. Вы можете помочь проекту, исправив и дополнив её. |
Common Lisp | |||||||
---|---|---|---|---|---|---|---|
Реализации | Allegro CL • ABCL • CLforJava • CLISP • Clozure CL • CMUCL • Corman Common Lisp • ECL • GCL • LispWorks • Macintosh Common Lisp • Movitz • Poplog • Scieneer CL • SBCL • Symbolics Common Lisp | ||||||
Программное обеспечение |
|
||||||
Публикации | Common Lisp the Language • Paradigms of AI Programming • The Art of the Metaobject Protocol • On Lisp • Practical Common Lisp • Object-Oriented Programming in Common Lisp | ||||||
Design committee | X3J13 • Гай Стил | ||||||
Другое | CLOS • Common Lisp HyperSpec • CommonLoops • Десятое правило Гринспена |
Основные языки программирования (сравнение • IDE • история • хронология) | |
---|---|
Используемые в разработке |
Ада • APL • Язык ассемблера • ActionScript • ABAP/4 • AutoIt • AWK • Бейсик • Си • Кобол • C++ • C# • Cω • Clarion • Clojure • ColdFusion • Common Lisp • D • dBase • Delphi • Eiffel • Erlang • Euphoria • F# • Форт • Фортран • Gambas • Go • Groovy • HAL/S • Haskell • Icon • Java • JavaScript • Limbo • Lua • Модула-3 • Object Pascal • Objective-C • OCaml • Oz • Parser • Паскаль • Компонентный Паскаль • Perl • PHP • PowerBASIC • Python • ПЛ/1 • Пролог • Ruby • Scala • Scheme • Smalltalk • SQL • PL/SQL • Tcl • Vala • Visual Basic (.NET) |
Академические | |
IEC 61131-3 |
Instruction List • ST • FBD • Ladder Diagram (LD) • SFC |
Прочие | |
Эзотерические | |
Визуальные |
Common Lisp.