Lisp Programming Pdf

/ Comments off

Первая лисп-машина в музее. Лисп ( LISP, от LISt Processing language — «язык обработки списков»; современное написание: Lisp) — семейство, и данные в которых представляются системами. Создатель Лиспа занимался исследованиями в области (в дальнейшем ИИ) и созданный им язык по сию пору является одним из основных средств моделирования различных аспектов ИИ. Это один из старейших (наряду с и ) используемых по сей день, а также первый из сохранившихся в использовании языков, использующих автоматическое управление памятью.

Традиционный Лисп имеет. Язык является, но начиная уже с ранних версий обладает также чертами, к тому же, имея полноценные средства, позволяет реализовать; примером такой реализации является платформа.

Является языком для так называемых, производившихся в, например, фирмой. Наряду с, Лисп прошёл процесс фундаментальной стандартизации для использования в военном деле и промышленности, в результате чего появился стандарт. Его реализации существуют для большинства платформ. Содержание. Архитектура и синтаксис Основные элементы языка Базовыми элементами языка являются символы, атомы и построенные из них динамические списочные структуры —. Символ в Лиспе — это объект в машинной памяти, представляющий собой совокупность «слотов» — ячеек, хранящих ссылки. Часть слотов имеет изначально определённое языком назначение:.

Имя — строка знаков, по которой программа может ссылаться на данный символ (основополагающее аристотелево А=А, из которого вырастает ). Функциональный слот —, связанное с символом. Когда обращение к символу в программе синтаксически соответствует вызову функции, в результате вычисляется лямбда-выражение, связанное с символом. Значение — объект в машинной памяти, который можно трактовать как данные.

Программирование на Emacs Lisp. Предисловие переводчиков. Я познакомился с редактором Gnu Emacs в 2000 году, приблизительно через полгода после того, как начал изучение операционной системы Linux. И с тех пор очень и очень редко покидаю эту замечательную, расширяемую,.

  1. Введение: почему Lisp? Если вы считаете, что наибольшее удовольствие в программировании приносит написание лаконичных и выразительных программ, просто и прозрачно выражающих ваши мысли, тогда программирование на Common Lisp будет самым приятным из то- го, что вы можете делать.
  2. Lisp» — Peter Seibel, 2005; На английском: The Anatomy of Lisp — John Allen, 1978; On Lisp — Paul Graham, 1993; Common Lisp HyperSpec Синтаксис Типы данных Функции и функциональный стиль. → Основы функционального программирования: → Категория «Функциональное программирование».

Когда программа обращается к символу как переменной, она получает значение данного слота. Прочие системные слоты, определяемые реализацией. Набор слотов является динамически расширяемым и может, вследствие этого, использоваться как список произвольных свойств символа (можно свободно расширить слотовую систему удобным для решения задачи способом). Такое представление позволяет рассматривать символы как узлы многокоординатной сети, где каждая координата записана в своём слоте. Атомы — это символы и числа. Числа не являются лисповскими символами, поскольку могут иметь только собственное числовое значение и никакого другого. В то же время числа наравне с символами могут входить в списки.

Этим и обусловлено объединение этих двух понятий в одну общую категорию. Основная структура данных Лиспа — динамический атомов, определяемый как головной объект и присоединённый к нему список-хвост.

Поскольку голова списка тоже может быть списком, список является формой представления произвольного дерева (сам список верхнего уровня — корень, входящие в него подсписки второго и следующих уровней — узлы, атомы — листья). Для атомов и списков язык использует крайне примитивный скобочный синтаксис: символ представляется своим именем, число — записью его значения, а список — в виде заключённой в круглые скобки последовательности списков и атомов, в которой идущие подряд атомы при необходимости разделены пробелами.

Список является последовательностью элементов любого рода, в том числе других списков. Например, (1 3/7 'foo #'+) состоит из целого числа, рациональной дроби, символа foo и на функцию сложения. Выражения представляются списками в: первый элемент должен быть формой, то есть функцией, оператором, макросом или специальным оператором; прочие элементы — этой формы, передаваемые форме для обработки. Арифметические операторы записываются по тому же принципу, например (+ 4 (. 2 3)) выдаёт 10 (в инфиксной записи это 2. 3 + 4). Основная статья: С начала 1960-х годов в MIT был запущен проект MAC, в рамках которого велись исследования использования вычислительных машин в интерактивном режиме и разработка подходящих для такой работы языков программирования и операционных систем.

MacLisp (далее Маклисп) был разработан в рамках этого проекта, основой для него стала система Lisp 1.5. В 1964 году была создана первая реализация Маклиспа для PDP-6, в 1968 — для PDP-10, причём последняя работала как под управлением операционной системы ITS, разработанной в лаборатории искусственного интеллекта MIT, так и под ОС TOPS-10/20 — стандартной ОС для PDP-10/20 фирмы DEC. Также была создана реализация для компьютера GE-600, работавшая под управлением ОС.

Маклисп был чрезвычайно мощной для своего времени системой. На её облике отразилось всё многообразие задач, которые решались в проекте MAC и вообще в исследованиях по искусственному интеллекту в MIT. Помимо традиционных задач символьной обработки, Маклисп использовался для разработок в самых разных областях. Так, работы в области робототехники и обработки речи и изображений потребовали от системы высокой чисто вычислительной эффективности, а также привели к реализации широкого набора математических типов данных, в том числе векторов, матриц и битовых полей.

В систему были включены арифметические типы и операции с неограниченной точностью (базирующиеся на алгоритмах, разработанных ), позволяющие в ряде случаев существенно упростить решение некоторых математических задач, пусть и за счёт значительных вычислительных затрат. Была реализована мощная библиотека математических функций. В части вклада в развитие самого языка можно отметить появившиеся в Маклиспе макросы чтения и таблицы чтения, позволившие «достраивать» язык, расширяя его в нужном направлении новыми структурами. Также в язык были включены средства обработки исключений и средства параллельной обработки. Маклисп стал первой лисп-системой, для которой был реализован высокоэффективный (до этого лисп-системы не могли похвастаться высокой вычислительной производительностью и отчасти по этой причине сформировалось отношение к Лиспу как к «языку для учёных, а не для промышленности»). Причём эффективность трансляции была достигнута за счёт применения специфически лисповских методов: исходная программа транслировалась в промежуточную машинно-ориентированную форму, имеющую вид лисповских списков (так называемая LAP — List Assembly Program). Машинный код в этой форме путём формальных преобразований подвергался оптимизации, в результате которой результирующая объектная программа для вычислительных задач оказывалась, как правило, более эффективна, чем аналогичная программа на, оттранслированная лучшими фортрановскими компиляторами для той же платформы.

Исторически наиболее известные результаты проекта MAC — это система символьных вычислений и текстовый редактор. Macsyma — мощная система символических вычислений, по сути — пионер в этой области компьютерных систем, разработка её велась в MIT с 1968 по 1982 год. Система была целиком написана на Маклиспе и была, по всей видимости, самой большой широко известной программой в мире, целиком написанной на Лиспе.

Именно перенос Macsyma на другие аппаратные и программные платформы стал тем мотивом, который вызвал появление нескольких диалектов Лиспа. Emacs изначально был написанным целиком на Маклиспе полноэкранным текстовым редактором, являющимся как частью среды разработки Маклиспа, так и используемым отдельно от неё, зачастую для целей, не имеющих ничего общего с программированием. Отличительной особенностью его была возможность программирования поведения редактора и добавления в него новой функциональности путём написания соответствующего кода на внутреннем языке, которым стал. Фактически ядро редактора представляет собой интерпретатор Emacs Lisp, и некоторый набор системно-зависимых сервисов.

Основная часть редактора написана на самом Emacs Lisp. Впоследствии, при переносе Emacs на микрокомпьютеры, ядро было переписано на C (из соображений эффективности — на тот момент не существовало эффективных реализаций Лиспа для ПК), но в остальном редактор остался прежним и продолжил развиваться в том же направлении, приобретя со временем огромное количество написанных на Emacs Lisp дополнений, расширивших его функциональность до огромных размеров, что стало поводом для шутки: «Emacs — отличная операционная система, которой не хватает только приличного текстового редактора». Система MAC Lisp эксплуатировалась и развивалась вплоть до 1980-х годов, оказав существенное влияние на появлявшиеся в 1960—1980 годах реализации Лиспа, в том числе став одним из источников проектирования стандарта Common Lisp.

Эксплуатация системы практически прекратилась в 1980-х годах вместе с прекращением использования компьютеров PDP-10/20, на которых она изначально базировалась. Намного пережили систему разработанные на Маклиспе и уже упоминавшиеся Macsyma и Emacs.

Interlisp Разработкой лисп-систем в середине 1960-х годов занимались многие компании и исследовательские центры в США. Интерлисп (Interlisp) стал результатом объединения усилий BBN (Bolt, Beranek and Newman Inc.), SDS (Scientific Data Systems) и Xerox. Исследовательский центр BBN в 1966 году приступил к созданию своей реализации Лиспа, ориентированной на компьютеры PDP-10 и SDS-930. Версия BBN-Lisp для PDP использовала аппаратный механизм страничной организации памяти и переключения контекста, созданный специально для обеспечения высокоэффективного разделения времени.

BBN-Lisp стал популярен среди исследователей в области искусственного интеллекта и во многом способствовал тому, что именно машины PDP-10/20 вплоть до 1980-х годов оставались основными инструментами в работах по ИИ. В начале 1970-х корпорация Xerox купила обанкротившуюся SDS и начала сотрудничать с BBN.

Несмотря на то, что машины SDS не имели большого коммерческого успеха, реализация Лиспа от BBN была достаточно перспективной, чтобы Xerox поддержала её дальнейшую разработку, в результате чего BBN-Lisp превратился в (Интерлисп). А в 1974 году в Xerox началась разработка персональной рабочей станции Alto, исходно ориентированной на Лисп. В этой системе впервые была произведена разработка аппаратуры и системы машинных команд под конкретный язык программирования. На основе Интерлиспа была создана упрощённая версия системы Interlisp-D, предназначенная для лисп-машин серии 1100 («потомков» станции Alto). В этих машинах был впервые реализован многооконный графический интерфейс пользователя, использована графика с высокой разрешающей способностью и применён манипулятор «мышь».

Интерлисп был тщательно разработанной и хорошо документированной системой. Он представлял собой хорошо продуманную интегрированную среду разработки с редактором исходных кодов, отладчиком, интерпретатором и множеством вспомогательных инструментов разработчика. В этом смысле его можно считать классическим примером развитой программной среды для систем разделения времени. В системных библиотеках было реализовано свыше 500 функций, система имела большое количество настроек, позволявших «подогнать» её под пользователя.

Реализации Интерлиспа со временем были выполнены на большинстве широко распространённых больших компьютеров, работавших в режиме разделения времени. Что же касается собственно языка, то можно заметить, что диалект со всеми его характерными особенностями был зафиксирован уже в середине-конце 1970-х годов, после чего кардинальных изменений в язык не вносилось.

Это привело к некоторому отставанию системы от более новых разработок в части функциональности и к фиксации некоторых устаревших проектных решений. Вследствие этого уже к началу 1980-х Интерлисп испытывал трудности как с совместимостью с новыми системами, так и с дальнейшим расширением. Наиболее существенные недостатки Интерлиспа — отсутствие иерархии типов данных, объектов и замыканий (впрочем, в 1983 году в Интерлиспе была реализована объектная система LOOPS, дающая возможности объектно-ориентированного программирования). Более существенно то, что Интерлисп базируется на динамическом связывании, тогда как все новые версии Лиспа — статические.

У этого термина существуют и другие значения, см. Лисп попал в Калифорнию вместе с Маккарти, перешедшим в в 1963 году. За следующие несколько лет были разработаны системы Lisp 1.6 (прямой потомок «классического» Lisp 1.5), UCI Lisp (University of California, Irvine) и Stanford Lisp/360. Оттуда вместе с Энтони Хёрном Лисп попал в в, где занималась исследованиями в области символьной математики в приложениях теоретической физики. Хёрн предложил решать эти задачи с помощью Лиспа, в результате чего в 1968 году была создана система компьютерной алгебры. Хёрн в 1966 году опубликовал спецификацию Standard Lisp, которую предлагал в качестве основы для стандартизации языка. Предложение его не встретило поддержки, так как не было одобрено исследователями искусственного интеллекта, указавшими на ряд нежелательных для них особенностей предлагаемого стандарта, в частности, излишнюю привязку к типам.

Тем не менее, на основе данной спецификации в Юте был реализован Portable Standard Lisp — PSL. Эта реализация была использована для развития Reduce и переноса её на различные аппаратные платформы.

Специально для улучшения переносимости в PSL был включён сокращённый набор системных функций и структур. Реализация была основана на промежуточном низкоуровневом лисп-подобном языке SYSLisp; ядро PSL было написано на SYSLisp, а вся остальная часть системы — на самом PSL. Для PDP-10 был реализован транслятор SYSLisp и написанный на том же SYSLisp кросс-компилятор, с помощью которого ядро PSL можно было перенести на любую другую аппаратуру. С помощью этой технологии PSL и Reduce были реализованы на целом ряде платформ, в том числе на DEC-10/20, VAX/UNIX, HP9000, Apollo, Wicat, IBM, Cray. Таким образом, PSL стал одним из первых примеров реализации техники «раскрутки» при переносе программных систем на новую архитектуру, когда для переноса системы ядро изначально пишется на машинно-независимом промежуточном языке, для которого, в свою очередь, создаются реализации на всех целевых платформах.

Дальнейшее сопровождение PSL осуществлялось исследовательским центром фирмы в Калифорнии. Franz Lisp Мотивом для создания в конце 1970-х годов системы послужило желание получить лисп-систему для новых компьютеров VAX, чтобы обеспечить выполнение на них системы Macsyma и другого написанного на Лиспе программного обеспечения. Поскольку основной целью был перенос Macsyma, за основу был взят MACLisp, однако из языка были исключены некоторые устаревшие особенности и добавлены новые механизмы, заимствованные из разрабатываемого в то время в том же MIT Zetalisp. Наиболее значительный вклад в создание данного диалекта внесли,. Одним из основных вдохновителей проекта был профессор Университета Беркли Ричард Фэйтман, ранее работавший в MIT и участвовавший в разработке оригинальной системы Macsyma.

В числе создателей Franz Lisp было несколько его учеников. Название системы было выбрано в честь известного венгерского композитора (английское написание: Franz Liszt). Система была реализована в на для 780/11 под управлением ОС. Входящий в состав системы компилятор носил имя «Liszt» — фамилии композитора, давшего имя диалекту.

В 1982 году система была портирована на процессор, затем ещё на ряд 32-разрядных персональных платформ, в результате она стала наиболее широко используемой версией Лиспа как для 32-разрядных систем с разделением времени, так и для 32-битовых мини-ЭВМ и персональных рабочих станций. Система Franz Lisp распространялась бесплатно под лицензией BSD, но аспирант Университета Беркли Фридрих Кунце подал идею создания коммерческой компании, которая бы обеспечивала качественную платную поддержку пользователей и выполняла заказы по портированию Franz Lisp на новые аппаратные и программные платформы. Это было время активного роста компьютерного рынка и перспективы выглядели неплохо. Компания была зарегистрирована в 1984 году и получила название «Franz Inc».

Начало деятельности фирмы было достаточно удачным, ей удалось получить контракт на портирование Franz Lisp на платформу Sun, а позже — ещё несколько аналогичных предложений. Однако в 1985 году под давлением Министерства обороны США американское лисп-сообщество начало активную переориентацию на новый диалект — Common Lisp, создание которого в это время завершалось. В этих условиях Franz Inc.

Не могла найти новых контрактов, оказалась на грани закрытия и была вынуждена перейти к разработке собственной реализации Common Lisp — (название было выбрано, чтобы сохранить преемственность «музыкальной» темы). История Franz Lisp на этом, фактически, завершилась.

В настоящее время оригинальная система полностью вышла из употребления. Основная статья: Язык Scheme был разработан в 1976 году в MIT в рамках проекта по созданию лисп-машины — персональной рабочей станции, разработанной полностью, начиная с аппаратуры, в расчёте на максимально эффективное использование языка Лисп. Исходно Scheme был всего лишь «исследовательским языком», в ходе разработки которого опробовались различные идеи и методы. Ставилась цель обеспечить минимальный набор базовых возможностей, который обеспечивал бы построение полноценной лисп-системы путём надстраивания этого набора. В результате получилось небольшое по объёму и элегантно определённое ядро, при этом весьма эффективно реализованное. В частности, Scheme стал первым диалектом Лиспа, в котором гарантировалась оптимизация хвостовой рекурсии.

В языке реализован мощный механизм макросов, помимо списков в качестве базовых конструкций поддерживаются массивы. Характерное синтаксическое отличие Scheme от большинства диалектов Лиспа — немного другая форма определения функции. Если в большинстве диалектов используется вариант: (DEFUN ИмяФункции (Аргументы) Выражения), то в Scheme сокращённая форма определения выглядит как (DEFINE (ИмяФункции Аргументы) (Выражения)). (Различается ключевое слово и взаимное расположение имени функции и аргументов). Scheme — единственный диалект Лиспа (не считая встроенных вариантов, таких как Emacs Lisp или AutoLISP), который продолжает использоваться после повсеместного перехода лисп-сообщества на стандартизованный Common Lisp. В настоящее время существует несколько поддерживаемых реализаций Scheme, в том числе свободных, есть примеры использования этого языка и в качестве встроенного (например, используемый в качестве средства создания скриптов Tiny-Scheme). В нескольких американских университетах Scheme используется как язык для базового обучения программированию.

Zetalisp или «Lisp Machine Lisp» был создан в MIT во второй половине 1970-х годов в рамках проекта лисп-машины, профинансированного американским оборонным агентством DARPA. Основная статья: Процесс разработки стандарта Из вышесказанного ясно, что к первой половине 1980-х годов в лисп-сообществе сложилась ситуация, которую некоторые авторы сравнивали с: параллельно существовали и развивались более десятка только крупных диалектов Лиспа, общее же число несовместимых между собой реализаций было существенно больше. Похожая ситуация наблюдалась в это время в большинстве распространённых языков программирования, в случае же с Лиспом ситуация усугублялась тем, что язык изначально был разработан как произвольно расширяемый, что спровоцировало развитие его возможностей в разных диалектах в существенно разных направлениях. Если на начальном этапе, когда Лисп использовался почти исключительно в лабораториях и институтах, многообразие диалектов не особенно мешало и даже было отчасти полезным, поскольку способствовало быстрому развитию языка, то к 1980-м годам, когда появилась потребность в промышленных разработках на Лиспе, обилие реализаций стало тормозом, поскольку приводило к массовому дублированию разработок и рассредоточению сил на поддержание множества лисп-систем в актуальном состоянии. Попытки стандартизации Лиспа предпринимались и ранее, почти с момента его появления (первое предложение по стандартизации Лиспа датируется 1960 годом), но из-за разобщённости и значительных различий в интересах заинтересованных групп разработчиков ни одно из предложений не было принято.

Дело сдвинулось с мёртвой точки лишь тогда, когда в качестве организатора процесса стандартизации выступила могущественная и богатая государственная организация — Министерство обороны США. Во второй половине 1970-х годов им была проведена огромная работа по анализу ситуации в программных разработках военного назначения и, затем, по поддержке создания на конкурсной основе нового языка высокого уровня для встроенных систем, которым стал язык Ада. Однако Ада изначально не предназначалась для искусственного интеллекта и символьной обработки и совершенно не приспособлена для решения такого рода задач. Поэтому, объявив Аду основным языком, обязательным для разработок по военным заказам, для ИИ-приложений и близких к ним задач военное ведомство США оказалось вынуждено допустить к использованию более подходящий для этих целей язык. Поэтому Министерство обороны США оказало организационную и финансовую поддержку формированию промышленного стандарта языка Лисп, который и приняло в качестве дополнительного средства разработки ПО для военных применений. Первоначальный вариант стандарта начали готовить в Университете Карнеги-Меллона на основе внутреннего проекта Spice Lisp, также первоначально нацеленного на разработку лисп-системы для рабочей станции.

Проектируемый стандарт с самого начала получил наименование «Common Lisp» («Общий Лисп»), подчёркивающее цель разработки — получить единый базовый язык, на основании которого можно было бы создавать программно-совместимые системы. В разработке и редактировании стандарта приняли участие около 80 специалистов из университетов, лабораторий и фирм США. Процесс разработки впервые происходил дистанционно, через компьютерную сеть, через которую было передано свыше 3000 сообщений. Процесс разработки стандарта завершился в 1984 году. Его результат был зафиксирован в первом издании руководства «Common Lisp: the Language» Гая Стила. Основные особенности В основном на идеологические основы стандарта повлияли MACLisp и его диалекты, большое количество возможностей было заимствовано из InterLISP и новых систем, таких как Zetalisp и NIL.

Common Lisp — язык со статическим связыванием, традиционным представлением функций (функции не являются «полноправными гражданами»), поддерживает макросы, функционалы, лексические замыкания. То есть с точки зрения функциональной части языка он содержит весь тот набор синтаксических средств, который за предыдущие четверть века сложился в Лиспе и достаточен для любых приложений функционального программирования и расширения языка в любом желаемом направлении. Системные функции в Common Lisp сохранили традиционные имена, но многие из них имеют синонимы с более наглядными именами, например, функции CAR (получение головы списка) и CDR (получение хвоста списка) имеют синонимы, соответственно, FIRST («первый») и REST («остаток»). Поскольку разработчикам требовался язык, пригодный для широкого спектра применений, а не только для искусственного интеллекта и символьной обработки, в результате получилась достаточно объёмная спецификация, хотя и сохранившая основные особенности Лиспа, но существенно расширенная функциями, синтаксическими средствами и механизмами, направленными на нехарактерные для исходного Лиспа способы разработки. Так, например, в язык были добавлены практически все существующие в традиционных императивных языках синтаксические конструкции, включая несколько видов циклов.

Объектная система (Common Lisp Object System) первоначально не была включена в стандарт, но вошла в него позже. Common Lisp пригоден для написания программ как в функциональном, так и в директивном стиле, на нём возможно обобщённое программирование (посредством стандартных макросов), продукционное программирование, имеются средства для организации логического, объектного программирования и программирования, управляемого данными. Спецификация Common Lisp не включает в себя подробного описания среды программирования, определяя лишь в самых общих чертах её состав и принципы взаимодействия элементов. Критики нового стандарта указывали на его раздутость и чрезмерное внимание, уделённое практическим требованиям, что привело к нарушению «функциональной чистоты» Лиспа и увеличению объёма поддерживающих его Лисп-систем. Тем не менее, под нажимом Министерства обороны США и частично с его финансовой поддержкой во второй половине 1980-х годов были созданы Common Lisp-реализации практически для всех распространённых платформ. «Старые» Лисп-системы, в большинстве, продолжали существовать, но их поддержка постепенно прекращалась, а пользователи и ПО мигрировали на Common Lisp. В результате к настоящему времени из ранее существовавшего набора реализаций языка в использовании остался разве что диалект Scheme и некоторое количество встроенных в мощное ПО систем, в которых Лисп играет роль скриптового языка для реализации внутренней логики и расширения возможностей.

Дальнейшие модификации Серьёзный пересмотр вышедшего в 1984 году стандарта, состоялся в, когда в него были внесены существенные изменения:. Объектная система, исходно не входившая в спецификацию Common Lisp, а считавшаяся неким «дополнением» к ней, стала частью официального стандарта. Был стандартизован макрос loop, реализующий встроенный императивный язык с инфиксным синтаксисом.

Внесены изменения в типы данных. Стандартизован механизм pretty-print — форматированного вывода кода и данных. Введены макросы компиляции. Добавлены новые операторы и внесены изменения в существующие. Обновлена система поддержки пакетов. Сделан ряд более мелких изменений. В Common Lisp был стандартизован.

Стандарт практически повторил спецификацию 1990 года, изменения незначительны и состоят, в основном, в добавлении, удалении и переименовании операторов и системных переменных и изменениях в системных вызовах. Можно отметить появление в Common Lisp типа boolean (логического), значениями которого могут быть только NIL и T. Примеры Пример программы, выводящей сообщение «». ( 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 — проверка на отрицательность. Применение Первые области применения языка Лисп были связаны с символьной обработкой данных и процессами принятия решений. Наиболее популярный сегодня диалект является универсальным языком программирования. Он широко используется в самых разных проектах: Интернет-серверы и службы, серверы приложений и клиенты, взаимодействующие с реляционными и объектными базами данных, научные расчёты и игровые программы. Основная статья: В начале 1970-х годов были осознаны ограничения, накладываемые системой разделения времени на пользователей интерактивных программных средств (к которым относятся и лисп-системы, и большинство написанных на Лиспе программ).

Кроме того, для Лиспа оказались относительно велики затраты на программную динамическую поддержку, включающую проверку типов во время исполнения и периодическую сборку мусора. Усложняющиеся программы требовали более производительного оборудования, и в 1973 году возникла идея разработки компьютера индивидуального пользования (рабочей станции), спроектированной, начиная с оборудования, специально для достижения максимально эффективного исполнения лисп-программ, в том числе с аппаратной поддержкой лямбда-вычисления и динамической типизации. В США исследования по созданию Лисп-компьютера велись в 1970-х годах в двух местах — исследовательском центре Palo Alto, принадлежащем корпорации, и в (последнее спонсировалось ). Результатом стало появление в начале-середине 1980-х годов трёх основных производителей: Xerox, (LMI) и Xerox производил лисп-машины, поддерживающие Интерлисп, две последние компании происходят из MIT и ориентируются на Зеталисп.

Несколько позже производством лисп-машин занялась, а в Японии в 1984 году был показан первый прототип коммерческой лисп-машины Alpha фирмы Фудзицу. Лисп-машины имели аппаратную архитектуру, ориентированную на обработку списков и функциональное программирование, с аппаратной поддержкой сборки мусора, динамической типизации. Поддерживаемые этими машинами комплексы средств разработки ПО представляли собой мощные интегрированные среды разработки, включающие в себя все компоненты, которые в настоящее время включают наиболее мощные языков высокого уровня.

Поддерживался многооконный графический интерфейс пользователя, работа с и другими дополнительными средствами позиционирования (, ), высококачественный ввод-вывод графики и звука. Несмотря на изначальную лисп-ориентированность, в лисп-машинах были доступны и другие языки высокого уровня и предоставлялись средства межъязыкового взаимодействия.

Сами лисп-системы лисп-машин содержали до тысяч функций различного назначения, обеспечивали как работу в интерпретируемом режиме, так и компиляцию программ в объектный код. Для своего времени лисп-машины были одними из мощнейших ЭВМ в классе персональных рабочих станций. Им прочили большое будущее, но в 1990-х годах все они вышли из употребления.

Производители либо прекратили свою деятельность, либо переориентировались на выпуск компьютеров общего назначения. Причиной стало то, что в условиях длительного разработка оборудования «под язык» оказалась бесперспективной — быстро развивающиеся компьютеры общего назначения, снабжённые трансляторами Лиспа, по своим возможностям догнали и обогнали специализированные лисп-машины, которые из-за самой специализации уже оказывались дороже и проигрывали в универсальности. Лисп в СССР и России В СССР работы, связанные с использованием Лиспа и созданием собственных Лисп-систем активизировались после 1968 года, когда группа американских учёных, среди которых были Дж. Маккарти и Б.

Беркли, посетила Советский Союз. В Новосибирске, в ВЦ Сибирского отделения Академии Наук, где Маккарти провёл больше всего времени, он заложил основу реализации Лиспа. В Москве, в ВЦ АН СССР советские математики Лавров и Силагадзе при содействии Беркли начали работу над собственной версией Лисп-интерпретартора для БЭСМ-6. Впоследствии Лавров перешёл на работу в, а Силагадзе — в ВЦ Грузинской академии наук в Тбилиси, где они продолжили работу с Лиспом и участвовали в создании нескольких Лисп-систем. В Ленинграде была создана Лисп-система для польского компьютера Odra 1204, в Москве — реализация для БЭСМ-6, совместимая с английской версией Лиспа для компьютера ICL 4, в МЭИ и в Дальневосточном научном центре во Владивостоке появились реализации для ЕС ЭВМ.

В Институте проблем передачи информации (Москва) в конце 1970-х была создана Лисп-система ЭКЛИСП для мини-компьютера ECLIPS. На компьютерах западного производства в СССР использовались Stanford Lisp и UT-Lisp (Дубна, IBM 370 и CDC 6600). Также популярна была шведская система Нордстрема (Лисп на Фортране). В 1975 году в Тбилиси состоялась четвёртая международная конференция по проблемам искусственного интеллекта IJCAI-75, которая способствовала повышению интереса к Лиспу и распространению его в университетах и НИИ. В 1978 году вышел первый учебник Лиспа на русском языке: С. С. Лавров и Г. С. Силагадзе «Автоматическая обработка данных. Язык ЛИСП и его реализация». В 1980-е годы интерес к Лиспу в СССР сохранялся, тем не менее, литературы по языку издавалось очень мало (за десятилетие вышло две книги, обе переводные: «Функциональное программирование.

Применение и реализация» Хендерсона, переведённая в 1983 году, и двухтомник «Мир Лиспа» Э. Хювёнена и Й. Сеппянена, перевод которой был издан в 1990).

После распада СССР российское IT-сообщество достаточно быстро перешло на использование практически исключительно западной вычислительной техники и системного ПО. На сегодняшний день невозможно назвать ни одной Лисп-системы российского происхождения, которая находилась бы в эксплуатации. Лисп нельзя назвать популярным или распространённым в России; его использование в основном ограничивается академическими исследованиями и работами отдельных энтузиастов. Кроме того, Лисп продолжает использоваться в учебных целях в некоторых российских университетах, но и здесь в последние годы он оказался заметно потеснён: как язык общего назначения он не преподаётся и не используется, а в качестве учебных языков для преподавания функционального программирования часто предпочитают использовать более молодые функциональные языки, появившиеся в последние два десятилетия. Тем не менее, интерес к языку сохраняется, свидетельством чего является появление переводных и оригинальных печатных работ по Лиспу, возобновившееся в последние годы. Интересные факты. Существуют альтернативные расшифровки названия LISP: Lots of Irritating Superfluous Parentheses ( «Много раздражающих лишних скобок») — намёки на особенности синтаксиса.

Системные функции CAR и CDR получили такие необычные имена по историческим причинам. Машина, на которой Маккарти создавал самую первую реализацию Лиспа, содержала инструкции, позволяющие модифицировать части машинного слова. Машинное слово рассматривалось как структура с полями префикса, декремента, тега и адреса. Функции CAR (сокращение от Contents of the Address part of Register — «содержимое адресной части регистра») и CDR ( Contents of the Decrement part of Register — «содержимое декрементной части регистра») получили свои названия в соответствии с этими полями. В этой реализации поля адреса и декремента использовались для хранения, соответственно, указателей на голову и хвост списка. Также.

Примечания. 2.4.2 Процесс разработки языка LISP // Основные концепции языков программирования. — 5-е издание. — Вильямс, 2001. — С. 70. — 659 с. —. Теренс Пратт. ЛИСП 1.5 // Языки программирования: Разработка и реализация = Programming Languages: Design and Implementation. — 1-е изд. — М.: Мир, 1979. — С. 455. — 573. — статья, своего рода «вольный перевод» 1 главы из книги Successful Lisp Дэвида Лэмкинса. 22 августа 2011 года.

McCarthy J., Abrahams P., Edwards D., et al. Lisp 1.5 Programmer’s Manual. MIT Press, Cambrige, Massachusetts, 1962. Проверено 27 июля 2017. По сути, большая часть Emacs написана на EmacsLISP, что даёт неограниченные возможности расширения функциональности.

(англ.). John McCarthy // Communications of the ACM. — ACM New York, 1960. — Т. Литература.

Х. Сассман. — Книга и курс лекций MIT. В качестве основного языка используется.

ANSI Common Lisp. — Prentice Hall, 1995. — (англ.). Перевод: Пол Грэм. ANSI Common Lisp. — СПб.: Символ-Плюс, 2012. — 448 с. —.

Paul Graham. — Prentice Hall, 1993. — (англ.). Peter Seibel. Хювёнен Э., Сеппянен Й. С финск. — М.: Мир, 1990. — (русск.). —. — (финск.).

Имеется по теме «». — русский перевод книги (англ.). — русский перевод (незаконченный) сборника рецептов (англ.). — ресурсы по языку Лисп (учебники, статьи). — сайт, посвящённый Common Lisp, написанный на самом Common Lisp. — Лисп у «Истоков» (литература, ссылки, проекты с исходным кодом) Ссылки на английском. — статья Джона Маккарти Recursive Functions of Symbolic Expressions and Their Computation by Machine, содержащей первоначальное описание языка Лисп.

— сайт книги, откуда может быть скачана электронная версия (pdf) и архив с исходными кодами для книги. — вики-ресурс о библиотеках и проектах Common Lisp. Примечательно, что сам ресурс написан полностью на Common Lisp. — основной хостинг Common Lisp проектов.

Pdf

— ассоциация пользователей Лисп.

Emacs Lisp — диалект языка программирования, используемый в текстовых редакторах. Бо́льшая часть Emacs реализована на Emacs Lisp. Иногда также сокращённо называется elisp, хотя может возникнуть путаница со старым диалектом, имеющим такое же название и никак не связанным с Emacs Lisp. Emacs Lisp отличает мощная библиотека работы с текстовыми файлами, построенная на основе манипуляции такими встроенными примитивами, как буфер ( buffer), выделенная область ( region), точка ( point) и пометка ( mark). В отличие от других современных диалектов (, ) в Emacs Lisp присутствует только динамическая. Это не позволяет использовать такую технику, как.

Расширение cl вносит в Emacs Lisp некоторые особенности Common Lisp, в том числе лексическую. Пример Пример на Emacs Lisp.