Common Lisp | это... Что такое Common Lisp? (original) (raw)

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[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]

Таблица сравнения основных реализаций[4][5]

Название Поддерживаемые платформы Компиляция Возможности Лицензия
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) доступен

Примечания

  1. ANSI INCITS 226—1994 (R2004), ранее X3.226-1994 (R1999)
  2. Features of Common Lisp
  3. Lisp — программируемый язык программирования.
  4. Список основных реализаций Common Lisp
  5. Lisp Implementations
  6. GNU CLISP (англ.).
  7. CMUCL
  8. Clozure CL
  9. Steel Bank Common Lisp (англ.)
  10. Armed Bear Common Lisp
  11. Allegro CL — разработчик Franz Inc. (англ.)
  12. LispWorks. Разработчик — LispWorks, LLC (ранее Xanalys, Inc.)

Ссылки

Сообщества и форумы

Статьи

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

Просмотр этого шаблона Common Lisp
Реализации Allegro CL • ABCL • CLforJava • CLISP • Clozure CL • CMUCLCorman Common LispECLGCL • LispWorks • Macintosh Common Lisp • Movitz • Poplog • Scieneer CL • SBCL • Symbolics Common Lisp
Программное обеспечение Библиотеки CLSQL • CL-HTTP • CL-PPCRE • CLX • Ironclad • SymbolicWeb • UnCommon Web • Weblocks • Hunchentoot • AllegroCache • ASDF • CLiki • CLIM Приложения Clfswm • Common Music • Common Lisp Music • Common Music Notation • ICAD • InspireData • PrimeTrader • Mirai • Maxima • OpenMusic • PWGL • Stumpwm • SiteGrinder • OASIS • AutoPrice Среды разработки Climacs • Hemlock • SLIME
Публикации Common Lisp the Language • Paradigms of AI ProgrammingThe Art of the Metaobject ProtocolOn LispPractical Common LispObject-Oriented Programming in Common Lisp
Design committee X3J13 • Гай Стил
Другое CLOSCommon Lisp HyperSpec • CommonLoops • Десятое правило Гринспена
Просмотр этого шаблона Основные языки программирования (сравнениеIDEисторияхронология)
Используемыев разработке АдаAPLЯзык ассемблераActionScriptABAP/4AutoItAWKБейсикСиКоболC++C#ClarionClojureColdFusionCommon LispDdBaseDelphiEiffelErlangEuphoriaF#ФортФортранGambasGoGroovy • HAL/S • HaskellIconJavaJavaScriptLimboLuaМодула-3Object PascalObjective-COCamlOzParserПаскальКомпонентный ПаскальPerlPHPPowerBASICPythonПЛ/1ПрологRubyScalaSchemeSmalltalkSQLPL/SQLTclValaVisual Basic (.NET)
Академические AgdaCleanCurryЛогоMLРЕФАЛСимулаОберон
IEC 61131-3 Instruction ListSTFBDLadder Diagram (LD) • SFC
Прочие АлголАлгол 68Модула-2МирандаHope
Эзотерические HQ9+/HQ9++ • INTERCALBrainfuck • Brainfork • BefungeMalbolgePietSpoonUnlambdaWhitespaceFALSELOLCODE
Визуальные G (LabVIEW) • Microsoft VPLSikuliVisSimАлисаДРАКОНСкретч