Common Lisp
| Семантика: |
мультипарадигмальный: объектно-ориентированный, функциональный, императивный, метаязык |
|---|---|
| Тип исполнения: | |
| Появился в: | |
| Автор(ы): | |
| Типизация данных: |
сильная, динамическая, с опциональными декларациями типов |
| Основные реализации: |
Allegro Common Lisp, ABCL, CLISP, Clozure CL, CMUCL, Corman Common Lisp, ECL, LispWorks, Scieneer CL, SBCL |
| Испытал влияние: | |
| Повлиял на: |
Common Lisp (в переводе с англ. «Общий Лисп», сокр. CL) — диалект языка Лисп, стандартизированный ANSI (ANSI INCITS 226—1994 (R2004), ранее X3.226-1994 (R1999)). Разработанный с целью привести к общему знаменателю множество существовавших на тот момент диалектов Лиспа, является скорее стандартом языка, нежели отдельной реализацией. Доступно несколько реализаций Common Lisp, как коммерческих, так и свободно распространяемых.
Common Lisp — мультипарадигменный (то есть, поддерживающий несколько парадигм) язык программирования общего назначения. Он поддерживает комбинацию процедурного, функционального и объектно-ориентированного программирования.
Common Lisp включает в себя CLOS, систему Lisp макросов, позволяющую вводить в язык новые синтаксические конструкции, использовать техники метапрограммирования и обобщённого программирования.
Синтаксис
Common Lisp использует S-выражения для обозначения как кода, так и данных. Вызовы функций и макросов являются списками, где первый элемент, или голова списка, является именем функции, а остальные, — «хвост» списка, — аргументами. <source lang="lisp"> (+ 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).
</source>
Типы данных
Скалярные типы
Числовые типы включают в себя целые, отношения, числа с плавающей запятой и комплексные числа.[1] Common Lisp даёт возможность использовать большие числа для представления любых величин с большей точностью. Отношения могут быть представлены дробями.
Литеры в Common Lisp не ограничены ASCII. Большинство современных реализаций поддерживают Юникод.
Понятие Символа довольно близко Лиспу, хотя практически неизвестно в таком виде в других языках. В Лиспе символ — это уникальный объект из данных, включающих в себя: имя, значение, функцию, список свойств и пакет (пространство имён). Символы в Лиспе часто используются так же, как идентификаторы в других языках: для хранения значения переменной. Однако у них есть множество других применений. Обычно, когда символу присваивается значение, оно тут же им и возвращается. Некоторые символы присваивают значение сами себе. Например, булевы значения представлены в качестве двух самоопределяющихся символов, — T и NIL.
Есть несколько функций для округления скаларных типов разными способами. Функция round округляет аргумент до ближайшего целого числа, а если число стоит «посередине», то до ближайшего чётного. Функция truncate округляет числа по направлению к нулю. Функции floor («пол») и ceiling («потолок») округляют к ближайшему большему и ближайшему меньшему числу соответственно. Все функции возвращают дробную часть в качестве вторичного результата. Например: <source lang="lisp"> (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; </source>
Реализации
Common Lisp отличается от таких языков как C#, Java, Perl, Python тем, что он определяется своим стандартом и не существует его единственной или канонической реализации. Любой желающий может ознакомиться со стандартом и создать свою собственную реализацию. Common Lisp автоматически признаёт эти типы как равные.
| Название | Поддерживаемые платформы | Компиляция | Возможности | Лицензия |
|---|---|---|---|---|
| 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 |
Примечания
- ↑ http://abhishek.geek.nz/docs/features-of-common-lisp
- ↑ Список основных реализаций Common Lisp
- ↑ Lisp Implementations
- ↑ CMUCL
- ↑ Clozure CL
- ↑ Armed Bear Common Lisp
- ↑ Emacs Common Lisp
- ↑ LispWorks. Разработчик — LispWorks, LLC (ранее Xanalys, Inc.)
- ↑ YLisp. Компактный, усечённый CLOS. Разработчики — Д.Иванов и А.Слободюк
Ссылки
- lisper.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
| SQL | Это незавершённая статья о компьютерных языках. Вы можете помочь проекту, исправив и дополнив её. |
Основные языки программирования (список • сравнение • IDE • история • хронология) |
|
|---|---|
| Используемые в разработке |
Ада • АПЛ • Ассемблер • ActionScript • ABAP/4 • AutoIt • AWK • BASIC • C • Кобол • C++ • C# • ColdFusion • Common Lisp • D • dBase • Delphi • Eiffel • Erlang • F# • Forth • Фортран • Gambas • Groovy • Haskell • Icon • Java • JavaScript • Limbo • Lua • MATLAB • Object Pascal • Objective-C • OCaml • Oz • Оберон • Parser • Паскаль • Perl • PHP • PowerBASIC • PureBasic • Python • ПЛ/1 • Пролог • Ruby • Scala • Scheme • Smalltalk • SQL • PL/SQL • Tcl • Vala • Visual Basic • VB.NET |
| Академические | |
| IEC61131-3 |
Instruction List • ST • FBD • Ladder Diagram • SFC |
| Прочие | |
| Эзотерические | |
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
Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....