Loading AI tools
З Вікіпедії, вільної енциклопедії
Common Lisp (Коммон Лісп) — діалект мови програмування Лісп, визначений стандартом ANSI X3.226-1994. Розроблений з метою стандартизації різних варіантів мови Лісп що існували до появи стандарту. Цей діалект не є реалізацією, а, натомість, лише специфікацією мови програмування.
Common Lisp | |
---|---|
![]() | |
Парадигма | декілька: імперативна, функціональна, об'єктно-орієнтована |
Дата появи | 1984 |
Творці | Scott E. Fahlmand, Richard P. Gabrield і David Moond |
Розробник | ANSI |
Останній реліз | X3.226-1994 (1994) |
Система типізації | динамічна типізація[d] і строга типізація |
Під впливом від | Smalltalk, Knowledge Representation Language, Лісп |
Операційна система | Cross-platform |
Вебсайт | common-lisp.net |
Мова програмування Коммон Лісп реалізує декілька парадигм, зокрема:
В Коммон Лісп тип даних мають об'єкти, що зберігаються в змінних, а не самі змінні (що відповідає динамічній системі типізації). Кожна змінна може мати як значення будь-який об'єкт Лісп. Задля покращення швидкодії, дозволяється декларувати певні обмеження на можливі типи значень змінних.[1]
Множина всіх об'єктів позначається символом t. Порожня множина об'єктів або порожній список позначається символом nil що відповідає логічному «не вірно». Будь-яке інше значення окрім nil вважається логічним «вірно».
Крім цих типів даних, CLOS визначає типи даних для класів, методів, загальних методів.
В Коммон Ліспі макроси (англ. macro) — це оператори, що реалізуються шляхом перетворення коду. Макрос визначається тим, як буде перетворено код, що його викликає. Перетворення, що ще зветься розкриттям макроса (англ. macro expansion) виконується компілятором автоматично. Як наслідок — код, створений макросом стає такою ж частиною коду, як і введений користувачем код програми.[2]
До типових випадків використання макросів належать:
Макроси задають макросом defmacro. Спеціальний оператор macrolet дозволяє визначення локальних макросів. Також можливо задавати макроси для символів використанням define-symbol-macro та symbol-macrolet.
Книжка On Lisp Пола Грехема присвячена докладному розгляду можливостей макросів в Коммон Лісп.
Наприклад, наступний макрос визначає оператор aif
, що отримує дві або три форми, обчислює значення першої, запам'ятовує його в змінній it
та у випадку якщо значення істина (t
) виконує другу форму, а якщо значення не істина і задана третя форма — то третю (так зване анафоричне якщо):
(defmacro aif (test then &optional else)
`(let ((it ,test))
(if it ,then ,else)))
При цьому, запам'ятоване у змінній it
значення першої форми доступне під час виконання обох наступних:
(aif (тривале-та-складне-обчислення)
(print it))
що відповідає наступному псевдокоду:
it := тривале-та-складне-обчислення()
if it then
print it
Об'єктна система Коммон Ліспа (CLOS) є розширенням Коммон Ліспа, що додає підтримку можливостей об'єктно-орієнтованого програмування в Коммон Лісп. В основі цього розширення знаходяться загальні функції, множинне успадкування, декларативне комбінування методів, та мета-об'єктний протокол.[3]
Фундаментальними об'єктами CLOS є класи, екземпляри класів, загальні функції, та методи.
Загальна функція, це функція, поведінка якої залежить від класів або значень переданих аргументів. Об'єкт загальної функції містить множину методів, лямбда-список, тип комбінування методів, та іншу інформацію. Методи визначають поведінку загальних функцій в залежності від класів переданих аргументів; іншими словами, методи виконують спеціалізацію загальних функцій. Будучи викликаною, загальна функція виконує підмножину власних методів в залежності від класів аргументів.[4] Звичайна функція Коммон Лісп має одне «тіло» (список інструкцій), що завжди виконується при виклику функції. На відміну від звичайних функцій, загальні функції мають множину «тіл», лише підмножина яких виконується під час виклику загальної функції. Обрані «тіла», та спосіб їхньої комбінації залежить від класів параметрів загальної функції та способом комбінування.
Станом на листопад 2007 року, існують такі реалізації специфікації Коммон Лісп, що мали активну підтримку спільноти розробників:[5]
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.