Lisp
Lisp Лісп | |
---|---|
Парадигма | функціональне та процедурне програмування |
Дата появи | 1958 |
Творці | Джон Маккарті |
Розробник | Стів Расел, Тім Харт, Майк Левин |
Система типізації | dynamic, strong |
Діалекти | Common Lisp, Emacs Lisp, ISLISP, Scheme, AutoLISP, Clojure |
Під впливом від | Information Processing Languaged |
Вплинула на | Logo, Python, Smalltalk, Ruby, Dylan, Mathematica |
Лісп (Lisp) — мова програмування загального призначення з підтримкою парадигм функціонального та процедурного програмування. Вихідна інформація записується у вигляді списків.
Мову програмування Лісп було розроблено в кінці 1950-х у Массачусетському Технологічному Інституті для дослідження проблем штучного інтелекту. Але, через потужність закладених принципів, мова програмування Лісп також придатна для багатьох інших застосувань.
Комп'ютерна програма на Lisp педставляє рекурсивну функцію символьних виразів, яка будується аналогічно арифметичним функціям із елементарних з допомогою умовного оператору та операції суперпозиції. Умовний оператор має вигляд (p1 → l1; …, pn → ln). Результатом його виконання буде вираз li, якщо pi є істинним.
Існує п'ять елементарних функцій:
- atom — булева функція, яка визначає чи є досліджуваний вираз атомом — неподільною одиницею інформації;
- eq — булева функція, яка визначає рівність двох атомів;
- car, cdr — функції, які виокремлюють перший елемент та хвіст (список із всіх елементів окрім першого) відповідно;
- cons — включає новий елемент в початок списку.
Окрім елементарних функцій визначаються ряд складніших функцій, які будуються на їхній основі.
LISP означає LISt Processing (обробка списків), мова програмування працює із списками (та списками списків) розміщуючи їх між дужками. Дужки визначають межі списку. Списки є базисом мови програмування Лісп. Мова програмування Лісп була однією із перших мов програмування з автоматичним прибиранням сміття із пам'яті.[1]
Однією з переваг Lisp є те, що кожна змінна може виступати як рядок символів (власне ім'я), посилання на значення, структура даних або функція. Саме останній факт зробив цю мову дуже зручною при розробці лінгвістичних програм, особливо для природних мов з чіткою структурою речення (наприклад, англійська). В таких мовах кожне слово, його зміст/сенс/імператив, можна інтерпретувати як функцію від слів, що знаходяться на чітко визначених позиціях у реченні, до того ж ці позиції визначаються самим цим словом. Приклад системи, що побудована на цій ідеї можна знайти в книзі Т.Вінограда «Програма яка розуміє природну мову». Ця система реалізує діалог з користувачем природною мовою. Користувач бачить перед собою стіл з деякими предметами різного кольору, і може віддавати накази природною мовою, про перенесення якогось предмету. При цьому система (маніпулятор) сама визначає що треба зняти з цього предмету, який предмет на яких можна класти (на піраміду вже нічого не покладеш), і якщо є неоднозначність у виборі предмету ставить уточнювальні питання. Також реалізовано контекстне посилання займенників по тексту діалогу (користувач може сказати: «перестав той куб туди-то», і система з тексту діалогу може визначити, який саме «той куб»). Це імперативи. Також система може відповідати на питання. Вивід відповіді схожий до прологівського. Також є можливість користувачу висловлювати декларативи — вносити нові знання про об'єкти, наприклад, надавати їм імена. Хоча словник і база знань відносно не велика, але вона має можливості до розширення.
В наступному прикладі показано застосування «фундаментальної» функції cons:
(cons 'pine '(fir oak maple))
В результаті інтерпретації цього виразу, буде отримано список (pine fir oak maple).
Перший елемент (голова) списку може бути отриманий в результаті застосування функції car:
(car '(rose violet daisy buttercup))
Решту елементів списку можна отримати шляхом застосування функції cdr:
(cdr '(rose violet daisy buttercup))
Результат виконання цього виразу список (violet daisy buttercup).
- Енциклопедія кібернетики, Грінченко Т. А., том 1, ст. 531.
- Robert J. Chassel, An Introduction to Programming in Emacs Lisp.
- Mc Carthy J., Recursive functions of symbolic expressions and their computation by machine, part 1. «Communications of the Associations for Computing Machinery», 1960, v. 3, N. 4.
- Є. Хювьонен, Й. Сеппянен, Мир Лиспа методы и системы программирования, Москва, «Мир», (в двох томах) 1990.
- Пантелеев, А. Г. (1980). Об интерпретаторе с языка Лисп для ЕС ЭВМ (рос.). № 3. с. 86—87.
{{cite book}}
: Проігноровано|journal=
(довідка)
- Медведєв Михайло Геннадійович, «Мова функціонального програмування Лісп» [Архівовано 5 жовтня 2006 у Wayback Machine.].
- LispMachine.net Інформація та книжки про Лісп [Архівовано 20 серпня 2010 у Wayback Machine.](англ.)
- On Lisp [Архівовано 27 вересня 2007 у Wayback Machine.], безкоштовна книга Пола Грехема.(англ.)
- Lisp, каталог посилань Open Directory Project
- comp.lang.lisp група Usenet присвячена мові програмування Лісп.
- Association of Lisp Users [Архівовано 13 квітня 2022 у Wayback Machine.] (Асоціація Користувачів Лісп).(англ.)
- Association of Lisp Users Wiki.(англ.)
- Історія Лісп в Computer History Museum.(англ.)
Це незавершена стаття про мови програмування. Ви можете допомогти проєкту, виправивши або дописавши її. |