Common Lisp

Материал из Seo Wiki - Поисковая Оптимизация и Программирование

Перейти к: навигация, поиск
Common Lisp
Семантика:

мультипарадигмальный: объектно-ориентированный, функциональный, императивный, метаязык

Тип исполнения:

компилируемый

Появился в:

1984, стандартизирован ANSI в 1994 г.

Автор(ы):

комитет 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

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]
Название Поддерживаемые платформы Компиляция Возможности Лицензия
CLISP Windows, Mac, *nix Байт-код GNU GPL
CMUCL[4] Linux, FreeBSD, Solaris, Darwin Байт-код, Native, Block Compilation Общественное достояние с частями под BSD License
ECL Microsoft Windows, *nix, Mac OS X Байт-код, native via C GNU GPL с частями под другими лицензиями
GCL Windows, *nix Native via C GNU GPL
Clozure CL (бывший OpenMCL)[5] Linux/PPC, Linux/X86-64, Darwin/PPC, Darwin/X86-64, FreeBSD/X86-64, Windows Native LGPL
SBCL Linux, BSD, Solaris, Mac OS X (Darwin), Windows (экспериментально) Native Общественное достояние с частями под MIT License и BSD License
ABCL[6] *nix, MacOS X (Darwin), Windows JVM bytecode LGPL
emacs-cl[7] Emacs - Неполная реализация GPL
Allegro Common Lisp Windows, Unix, Linux, Mac OS X Native Коммерческая, доступна ограниченная демоверсия
LispWorks[8] Windows, *nix, Mac OS X Native CAPI - кросс-платформенная GUI-библиотека Коммерческая, доступна ограниченная демоверсия
Corman Common Lisp Windows Native Shareware
YLisp[9] Windows (консоль) Итерпретатор Неполная реализация Freeware

Примечания

  1. http://abhishek.geek.nz/docs/features-of-common-lisp
  2. Список основных реализаций Common Lisp
  3. Lisp Implementations
  4. CMUCL
  5. Clozure CL
  6. Armed Bear Common Lisp
  7. Emacs Common Lisp
  8. LispWorks. Разработчик — LispWorks, LLC (ранее Xanalys, Inc.)
  9. YLisp. Компактный, усечённый CLOS. Разработчики — Д.Иванов и А.Слободюк

Ссылки

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

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


de:Common Lisp

en:Common Lisp es:Common Lisp fi:Common Lisp fr:Common Lisp gl:Common Lisp hr:Common Lisp it:Common LISP ja:Common Lisp ko:커먼 리스프 pl:Common Lisp pt:Common Lisp ro:Common Lisp sv:Common Lisp uk:Common Lisp zh:Common Lisp

Источник — «http://www.sbup.com/wiki/Common_Lisp»
Личные инструменты

Served in 0.545 secs.