Common Lisp

Материал из Википедии — свободной энциклопедии

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

Common Lisp — промышленный стандарт языка Лисп (ANSI X3.226-1994). Был разработан с целью привести к общему знаменателю множество существовавших на тот момент диалектов Лиспа. Включает в себя объектно-ориентированную подсистему CLOS, развитую систему Lisp макросов, позволяющую вводить в язык новые синтаксические конструкции, использовать техники метапрограммирования и обобщённого программирования.

Большинство современных реализаций Лиспа ориентируются либо на него, либо на альтернативный «академический» диалект лиспа — Scheme.


Содержание

[править] Реализации

Common Lisp отличается от таких языков как C#, Java, Perl, Python тем, что он определяется своим стандартом и не существует его единственной или канонической реализации. Любой желающий может ознакомиться со стандартом и создать свою собственную реализацию.

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

[править] Примеры

Пример задания контрольной работы по функциональному программированию: Напишите функцию, которая из данного одноуровневого списка строит список списков его элементов, например, (a b) -> ((a) (b)).

  • Рекурсивный способ:
(defun list-of-lists (x)
  (when x
    (cons (list (first x))
	  (list-of-lists (rest x)))))
  • Итеративный:
(defun list-of-lists (list)
  (mapcar 'list list))
    • Используя loop:
(defun list-of-lists (list)
  (loop for i in list
	collect (list i)))

[править] Примечания

  1. Список основных реализаций Common Lisp
  2. Lisp Implementations
  3. CLISP
  4. CMUCL
  5. Embeddable Common Lisp
  6. GCL
  7. Clozure CL
  8. Armed Bear Common Lisp
  9. Emacs Common Lisp
  10. Allegro Lisp — реализация от Franz Inc.
  11. LispWorks. Разработчик — LispWorks, LLC (ранее Xanalys, Inc.)
  12. Corman Lisp — компактный, слегка сокращённый Common Lisp для Windows. Исходный код открыт под под лицензией, близкой к Shared source.

[править] Ссылки

[править] Документация и учебники