Лисп (LISP, от англ. LISt Processing language — «язык обработки списков»; современное написание: Lisp) — семейство языков программирования, программы и данные в которых представляются системами линейных списков символов. Один из старейших языков программирования.
Lisp появился в 1958 году усилиями Джона Маккарти. Особое предназначение Лиспа открыло для программистов новую область деятельности, известную ныне, как «искусственный интеллект». В настоящее время Лисп успешно применяется в экспертных системах, системах аналитических вычислений и т.п.
Обширность области возможных приложений Лиспа вызвала появление множества различных диалектов Лиспа. Это легко объяснимо: применение Лиспа для понимания естественного языка требует определенного набора базисных функций, отличных, например, от используемого в задачах медицинской диагностики.
Существование множества различных диалектов Лиспа привело к созданию в начале 80-х гг. Common LISP Комитета, который должен был выбрать наиболее подходящий диалект Лиспа и предложить его в качестве основного. Этот диалект, выбранный Комитетом в 1985г., получил название Common LISP . В дальнейшем он был принят в университетах США, а также многими разработчиками систем искусственного интеллекта, в качестве основного диалекта языка Лисп.
Язык программирования Лисп существенно отличается от других языков программирования, таких, как
Паскаль,
Си и т.п. Работа с символами и работа с числами как с основными элементами требует разных способов мышления.
Первоначально Лисп был задуман как теоретическое средство для рекурсивных построений, а сегодня он превратился в мощное средство, обеспечивающее программиста разнообразной поддержкой, позволяющей ему быстро строить прототипы весьма и весьма серьезных систем.
Профессор
Массачусетского технологического института Дж. Самман заметил, что математическая ясность и предельная четкость Лиспа – это еще не все. Главное – Лисп позволяет сформулировать и запомнить «идиомы», столь характерные для проектов по искусственному интеллекту.
Идеи языка Lisp дали жизнь целому ряду современных парадигм компьютерных языков. Важнейшая из них — парадигма функционального программирования. Эта парадигма впервые полно на русском языке изложена в переводе Л.Т. Петровой. В предисловии к этой книге
А.П. Ершов утверждает, что «понять и принять функциональное программирование легче, если рассматривать задачу программирования в ее полном контексте, начиная со спецификации задачи и логического анализа ее разрешимости, побочным продуктом которого является сама программа».
С приходом DEC-совместимой техники многие работы перекочевали на заимствованное программное обеспечение. Переход на диалекты Лиспа, такие как MuLisp и Interlisp, показал, что Лисп-программы менее чувствительны к аппаратным различиям, но зависят от системных вариаций семантики языка. Студенты технических университетов и архитектурных академий практикуют на AutoCAD, языком реализации и входным языком которого является AutoLisp.
С 1990-х годов стали доступными плоды свободно распространяемого обеспечения, включая систему GNU Clisp.
В середине 1990-х годов Дмитрий Иванов и Арсений Слободюк эффективно и аккуратно реализовали представительное (ок. 500 функций) учебное подмножество языка Common Lisp, соответствующее стандарту X3J13.
Историю отечественных реализаций языка Lisp в новом тысячелетии продолжил Б.Л. Файфель, создавший систему HomeLisp, обеспечивающую программирование в рамках современного
Windows-интерфейса, используя средства машинной графики, COM-объекты и BLOB-объекты, WEB-компоненты, т.е. все, к чему привык современный программист, воспитанный на
Visual Studio и Delphi. Система содержит в своем составе COM-библиотеку и два скриптовых движка, позволяющих писать скрипты на Лиспе, а также вызывать Лисп из любой среды, поддерживающей COM. Реализована возможность построения автономных EXE-файлов, в т.ч. и с графическим интерфейсом. Поддерживается сверхдлинная
арифметика целых. Входной язык этой системы, в основном навеянный идеями
С.С. Лаврова и реализацией GNU CLisp, содержит обобщение техники работы с атомами: список свойств можно связать не только с именем, но и с числом. Реализован встроенный редактор, средства дампирования, справочная подсистема с полным описанием языка и вспомогательный сервис для начинающих с примерами программирования и шаблонами применения функций.
По меткому выражению Л.В. Черноброд: «Зная Лисп, легко понимать любые языки программирования». Такому применению Лиспа способствует обилие дистанционно доступных любительских < A href = "../internet/website.html">сайтов и учебных материалов.
Примеры:
Пример программы, выводящей сообщение «
Hello, world! »:
(format t "Hello, world!~%")
Пример Куайн (программы, выводящей свой исходный код) на Лиспе:
((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))
Данная программа должна работать на большинстве диалектов Лиспа, в том числе и на Scheme.
Итеративная версия функции определения N-го числа Фибоначчи с использованием макроса Loop:
(defun fibonacci (n)
(loop repeat n
for a = 0 then b
and for b = 1 then (+ a b)
finally (return b)))
Рекурсивная версия функции N-го числа Фибоначчи:
(defun fibonacci (n)
(if (> n 1)
(fibonacci (1- n))
(fibonacci (- n 2)))
n))
Рекурсивная функция вычисления произвольной целой степени:
(defun power (m n)
(cond ((= n 1) m)
((zerop n) 1)
((minusp n)(/ 1 (power m (- n))))
(t (* m (power m (1- n))))))
Здесь использованы системные предикаты ZEROP — проверка на равенство нулю, MINUSP — проверка на отрицательность.
© kool
Источники:
itslovo.ru,
www.computer-museum.ru.
В начало