Common Lisp: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
SieBot (обсуждение | вклад)
м робот добавил: fa:لیسپ معمولی
Нет описания правки
Строка 17: Строка 17:
Common Lisp — мультипарадигменный (то есть, поддерживающий несколько [[Парадигма программирования|парадигм]]) язык программирования общего назначения. Он поддерживает комбинацию [[Процедурное программирование|процедурного]], [[Функциональное программирование|функционального]] и [[Объектно-ориентированное программирование|объектно-ориентированного программирования]].
Common Lisp — мультипарадигменный (то есть, поддерживающий несколько [[Парадигма программирования|парадигм]]) язык программирования общего назначения. Он поддерживает комбинацию [[Процедурное программирование|процедурного]], [[Функциональное программирование|функционального]] и [[Объектно-ориентированное программирование|объектно-ориентированного программирования]].


Common Lisp включает в себя [[CLOS]]; систему [[Лисп-марос|Lisp макросов]], позволяющую вводить в язык новые синтаксические конструкции, использовать техники [[метапрограммирование|метапрограммирования]] и [[Обобщённое программирование|обобщённого программирования]].
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]

Таблица сравнения основных реализаций[3][4]
Название Поддерживаемые платформы Компиляция Возможности Лицензия
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

Примечания

Ссылки

  • lisper.ru — Русскоязычное сообщество Common Lisp разработчиков.
  • clisp.linkfly.ru — Ресурс с множеством различных материалов по Common Lisp
  • lisp.ystok.ru — Лисп у «Истоков»: русский LispWorks, проекты с исходным кодом, форумы.
  • CLiki — Common Lisp Wiki (англ.).
  • common-lisp.net — хостинг для размещения открытых программных проектов.

Документация и учебники