ЭВМHISTORY
Статьи. Обзоры. Истории

Программирование | Lisp



Лисп (LISP, от англ. LISt Processing language — «язык обработки списков»; современное написание: Lisp) — семейство языков программирования, программы и данные в которых представляются системами линейных списков символов. Один из старейших языков программирования.

Lisp появился в 1958 году усилиями Джона Маккарти. Особое предназначение Лиспа открыло для программистов новую область деятельности, известную ныне, как «искусственный интеллект». В настоящее время Лисп успешно применяется в экспертных системах, системах аналитических вычислений и т.п.

Обширность области возможных приложений Лиспа вызвала появление множества различных диалектов Лиспа. Это легко объяснимо: применение Лиспа для понимания естественного языка требует определенного набора базисных функций, отличных, например, от используемого в задачах медицинской диагностики.

lisp, лисп

Существование множества различных диалектов Лиспа привело к созданию в начале 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.


В начало


Программирование | Lisp



Рейтинг@Mail.ru Яндекс.Метрика