Common Lisp: различия между версиями
[непроверенная версия] | [отпатрулированная версия] |
SieBot (обсуждение | вклад) м робот добавил: fa:لیسپ معمولی |
Нет описания правки |
||
Строка 17: | Строка 17: | ||
Common Lisp — мультипарадигменный (то есть, поддерживающий несколько [[Парадигма программирования|парадигм]]) язык программирования общего назначения. Он поддерживает комбинацию [[Процедурное программирование|процедурного]], [[Функциональное программирование|функционального]] и [[Объектно-ориентированное программирование|объектно-ориентированного программирования]]. |
Common Lisp — мультипарадигменный (то есть, поддерживающий несколько [[Парадигма программирования|парадигм]]) язык программирования общего назначения. Он поддерживает комбинацию [[Процедурное программирование|процедурного]], [[Функциональное программирование|функционального]] и [[Объектно-ориентированное программирование|объектно-ориентированного программирования]]. |
||
Common Lisp включает в себя [[CLOS]]; систему [[Лисп- |
Common Lisp включает в себя [[CLOS]]; систему [[Лисп-макрос|Lisp макросов]], позволяющую вводить в язык новые синтаксические конструкции, использовать техники [[метапрограммирование|метапрограммирования]] и [[Обобщённое программирование|обобщённого программирования]]. |
||
== Синтаксис == |
== Синтаксис == |
Версия от 06:17, 12 мая 2010
Common Lisp | |
---|---|
Семантика | мультипарадигмальный: объектно-ориентированный, функциональный, императивный, метаязык |
Класс языка | язык программирования, процедурный язык программирования, объектно-ориентированный, язык функционального программирования и мультипарадигмальный |
Тип исполнения | компилируемый |
Появился в | 1984, стандартизирован ANSI в 1994 |
Автор | комитет X3J13 |
Разработчик | X3J13[вд] |
Система типов | сильная, динамическая, с опциональными декларациями типов |
Основные реализации | Allegro Common Lisp, ABCL, CLISP, Clozure CL, CMUCL, Corman Common Lisp, ECL, LispWorks, Scieneer CL, SBCL |
Испытал влияние | Lisp, Lisp Machine Lisp, MacLisp, InterLisp, Scheme |
Повлиял на | Clojure, Factor, Dylan, EuLisp, ISLisp, SKILL, Stella, SubL |
Сайт | www.ruby-lang.org |
Медиафайлы на Викискладе |
Common Lisp (в переводе с англ. «Общий Лисп», сокр. CL) — диалект языка Лисп, стандартизированный ANSI (ANSI INCITS 226—1994 (R2004), ранее X3.226-1994 (R1999)). Разработанный с целью привести к общему знаменателю множество существовавших на тот момент диалектов Лиспа, является скорее стандартом языка, нежели отдельной реализацией. Доступно несколько реализаций 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).
Типы данных
Скалярные типы
Числовые типы включают в себя целые, отношения, числа с плавающей запятой и комплексные числа.[1] Common Lisp даёт возможность использовать большие числа для представления любых величин с большей точностью. Отношения могут быть представлены дробями.
Литеры в Common Lisp не ограничены ASCII. Большинство современных реализаций поддерживают Юникод.
Понятие Символа довольно близко Лиспу, хотя, практически неизвестно в таком виде в других языках. В Лиспе символ — это уникальный объект из данных, включающих в себя: имя, значение, функцию, список свойств и пакет (пространство имён). Символы в Лиспе часто используются так же, как идентификаторы в других языках: для хранения значения переменной. Однако, у них есть множество других применений. Обычно, когда символу присваивается значение, оно тут же им и возвращается. Некоторые символы присваивают значение сами себе, так, например, булевы значения представлены в качестве двух самоопределяющихся символов, — T и NIL.
Есть несколько функций для округления скаларных типов разными способами. Функция round округляет аргумент до ближайшего целого числа, а если число стоит «посередине», то до ближайшего чётного. Функция truncate округляет числа по направлению к нулю. Функции floor («пол») и ceiling («потолок») округляют к ближайшему большему и ближайшему меньшему числу соответственно. Все функции возвращают дробную часть в качестве вторичного результата. Например:
(round 2.5) ; возвращает 2 и 0.5
(round 3.5) ; возвращает 4 и -0.5
(truncate 1.5) ; возвращает 1 и 0.5
(truncate -4.5) ; возвращает -4 и -0.5
(floor -2.5) ; возвращает -3, 0.5
(ceiling -2.5) ; возвращает -2, -0.5;
Реализации
Common Lisp отличается от таких языков, как C#, Java, Perl, Python тем, что он определяется своим стандартом и не существует его единственной или канонической реализации. Любой желающий может ознакомиться со стандартом и создать свою собственную реализацию. Common Lisp автоматически признаёт эти типы как равные.[2]
Название | Поддерживаемые платформы | Компиляция | Возможности | Лицензия |
---|---|---|---|---|
CLISP[5] | Windows, Mac, *nix | Байт-код | GNU GPL | |
CMUCL[6] | Linux, FreeBSD, Solaris, Darwin | Байт-код, машинный код, Block Compilation[уточнить] | Общественное достояние с частями под BSD License | |
ECL | Microsoft Windows, *nix, Mac OS X | Байт-код, машинный код через C | GNU GPL с частями под другими лицензиями | |
GCL | Windows, *nix | Машинный код через C | GNU GPL | |
Clozure CL (бывший OpenMCL)[7] | Linux/PPC, Linux/X86-64, Darwin/PPC, Darwin/X86-64, FreeBSD/X86-64, Windows | Машинный код | LGPL | |
SBCL[8] | Linux, BSD, Solaris, Mac OS X (Darwin), Windows (экспериментально) | Машинный код | Общественное достояние с частями под MIT License и BSD License | |
ABCL[9] | *nix, MacOS X (Darwin), Windows | байт-код JVM | LGPL | |
emacs-cl[10] | Emacs | - | Неполная реализация | GPL |
Allegro Common Lisp[11] | Windows, Unix, Linux, Mac OS X | Машинный код | Коммерческая, доступна ограниченная демоверсия | |
LispWorks[12] | Windows, *nix, Mac OS X | Машинный код | CAPI - кросс-платформенная GUI-библиотека | Коммерческая, доступна ограниченная демоверсия |
Corman Common Lisp | Windows | Машинный код | Shareware | |
YLisp[13] | Windows (консоль) | Итерпретатор | Неполная реализация | Freeware |
Примечания
- ↑ http://abhishek.geek.nz/docs/features-of-common-lisp
- ↑ Lisp — программируемый язык программирования.
- ↑ Список основных реализаций Common Lisp
- ↑ Lisp Implementations
- ↑ GNU CLISP (англ.).
- ↑ CMUCL
- ↑ Clozure CL
- ↑ Steel Bank Common Lisp (англ.)
- ↑ Armed Bear Common Lisp
- ↑ Emacs Common Lisp
- ↑ Allegro CL — разработчик Franz Inc. (англ.)
- ↑ LispWorks. Разработчик — LispWorks, LLC (ранее Xanalys, Inc.)
- ↑ YLisp. Компактный, усечённый CLOS. Разработчики — Д.Иванов и А.Слободюк
Ссылки
- lisper.ru — Русскоязычное сообщество Common Lisp разработчиков.
- clisp.linkfly.ru — Ресурс с множеством различных материалов по Common Lisp
- lisp.ystok.ru — Лисп у «Истоков»: русский LispWorks, проекты с исходным кодом, форумы.
- CLiki — Common Lisp Wiki (англ.).
- common-lisp.net — хостинг для размещения открытых программных проектов.
Документация и учебники
- Practical Common Lisp Учебник Питера Сейбеля (wiki-проект по переводу на русский).
- Common Lisp HyperSpec — Гиперспецификация (HTML-версия) стандарта ANSI Common Lisp
- Common Lisp the Language, 2nd Edition by by Guy L. Steele — Классическое руководство по Common Lisp
- cl-cookbook.sourceforge.net — Поваренная книга Common Lisp
- Paul Graham. On Lisp
Это заготовка статьи о компьютерных языках. Помогите Википедии, дополнив её. |