<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sib">
	<id>https://sibwiki.org/index.php?action=history&amp;feed=atom&amp;title=%D0%9B%D0%B8%D1%81%D0%BF</id>
	<title>Лисп - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://sibwiki.org/index.php?action=history&amp;feed=atom&amp;title=%D0%9B%D0%B8%D1%81%D0%BF"/>
	<link rel="alternate" type="text/html" href="https://sibwiki.org/index.php?title=%D0%9B%D0%B8%D1%81%D0%BF&amp;action=history"/>
	<updated>2026-05-31T14:10:54Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://sibwiki.org/index.php?title=%D0%9B%D0%B8%D1%81%D0%BF&amp;diff=85938&amp;oldid=prev</id>
		<title>Yaroslav: Bot: Automated import of articles</title>
		<link rel="alternate" type="text/html" href="https://sibwiki.org/index.php?title=%D0%9B%D0%B8%D1%81%D0%BF&amp;diff=85938&amp;oldid=prev"/>
		<updated>2026-05-30T21:58:53Z</updated>

		<summary type="html">&lt;p&gt;Bot: Automated import of articles&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторонка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{YouTube|Ii829od9Q04|width=300|height=250}}&lt;br /&gt;
&lt;br /&gt;
Лисп (от англ. LISP — LISt Processing, «обработка списков») — это семейство высокоуровневых языков программирования, являющееся одним из старейших в истории вычислительной техники. Язык послужил фундаментальной концептуальной базой для зарождения и развития парадигмы функционального программирования. Изначально спроектированный как специализированный инструмент для исследований в области искусственного интеллекта и символьной обработки информации, Лисп оказал колоссальное влияние на индустрию программирования, привнеся в неё такие инновации, как автоматическая сборка мусора, динамическая типизация и концепция «код как данные» (гомоиконичность).&lt;br /&gt;
&lt;br /&gt;
== История создания ==&lt;br /&gt;
Разработка языка была инициирована в конце 1950-х годов американским ученым Джоном Маккарти во время его работы в Массачусетском технологическом институте (MIT). Совместно с Марвином Мински Маккарти занимался передовыми проблемами искусственного интеллекта. Прямым предшественником Лиспа был специализированный язык IPL (Information Processing Language), созданный для проекта «Logic Theorist» — системы автоматического вывода теорем математической логики. IPL уже содержал базовую идею связанных списков, которая опиралась на психологические (бихевиористские) гипотезы того времени о том, что человеческая память функционирует как сеть ассоциативных списков.&lt;br /&gt;
&lt;br /&gt;
В 1958 году Стив Рассел, коллега Джона Маккарти, перенес теоретические алгоритмы интерпретатора в машинный код и реализовал первую рабочую версию Лиспа на компьютере IBM 704. Эта ранняя реализация отличалась нестабильностью и отсутствием интерактивного режима работы. Полноценный прорыв произошел в 1960 году, когда для нового компьютера PDP-1 (производства компании DEC) была создана система LISP 1. Она представляла собой первую в истории интегрированную среду разработки (IDE), включающую встроенный интерпретатор, редактор исходного кода и отладчик. К 1963 году были опубликованы классические академические статьи, окончательно сформировавшие теоретическую базу языка.&lt;br /&gt;
&lt;br /&gt;
== Развитие в СССР ==&lt;br /&gt;
Советская школа программирования также уделяла значительное внимание этому языку. В 1968 году Джон Маккарти посетил Новосибирск (один из главных вычислительных центров СССР), где прочитал курс лекций для советских математиков и академиков. Вскоре после этого в Советском Союзе начали разрабатываться собственные интерпретаторы Лиспа для суперкомпьютеров серии БЭСМ-6, а позднее — для архитектуры ЕС ЭВМ.&lt;br /&gt;
&lt;br /&gt;
В 1978 году был издан первый отечественный учебник «Язык Лисп и его реализация», а в 1979 году в Тбилиси состоялась крупная международная конференция по искусственному интеллекту, где Лисп и Пролог обсуждались как ключевые инструменты отрасли. В 1990 году был выпущен фундаментальный двухтомник «Мир Лисп», закрепивший позиции языка в советской и постсоветской академической среде.&lt;br /&gt;
&lt;br /&gt;
== Диалекты и стандартизация ==&lt;br /&gt;
Фундаментальной исторической проблемой языка стало появление огромного числа несовместимых между собой диалектов. Архитектурная гибкость Лиспа позволяла разработчикам легко модифицировать его под собственные нужды, что привело к сильной фрагментации экосистемы.&lt;br /&gt;
&lt;br /&gt;
Ключевые исторические и современные диалекты:&lt;br /&gt;
* Maclisp (начало 1960-х) — разработан в MIT для архитектуры PDP, применялся для создания одной из первых систем компьютерной алгебры Macsyma (1968 год).&lt;br /&gt;
* Interlisp (1974) — отличался глубокой документацией и наличием более 500 встроенных функций в системных библиотеках.&lt;br /&gt;
* Scheme (1976) — минималистичный академический диалект, созданный в MIT. Широко применяется в качестве базового языка для обучения принципам функционального программирования.&lt;br /&gt;
* Franz Lisp (1981) — коммерчески успешная реализация для операционных систем семейства Unix. Название является игрой слов, отсылающей к имени венгерского композитора Ференца Листа.&lt;br /&gt;
* Common Lisp (1984) — унифицированный индустриальный стандарт, созданный по прямому требованию Министерства обороны США для прекращения хаоса среди диалектов. В 1990 году в него была интегрирована мощная объектно-ориентированная подсистема CLOS (Common Lisp Object System), а в 1995 году язык получил строгий международный стандарт.&lt;br /&gt;
* Racket (1994) — язык, выросший из диалекта Scheme. Обладает богатым набором библиотек, собственным компилятором и отладчиком. Часто используется для обучения программированию через создание компьютерных игр.&lt;br /&gt;
* Clojure, PicoLisp, EuLisp — современные деривации и ответвления, развивающие идеи Лиспа в новых архитектурных средах (например, в виртуальной машине Java).&lt;br /&gt;
&lt;br /&gt;
== Базовые элементы и типы данных ==&lt;br /&gt;
Лисп является регистронезависимым языком с динамической типизацией. Переменная не требует предварительного объявления типа; тип значения определяется в момент его создания и помещения в ячейку памяти. &lt;br /&gt;
&lt;br /&gt;
Архитектура данных строится на трех фундаментальных элементах:&lt;br /&gt;
* Символы — базовые объекты в памяти машины. Символ представляет собой узел (набор слотов), хранящий ссылки на другие ячейки памяти. Слоты символа могут содержать его имя (строку знаков), значение (данные) и функциональный слот (лямбда-выражение, связанное с символом). Свойства символа динамически расширяемы.&lt;br /&gt;
* Атомы — это минимальные неделимые сущности (к ним относятся символы и числа). &lt;br /&gt;
* Списки — основополагающая структура данных, определяемая рекурсивно. Концептуально список в Лиспе — это бинарное дерево, в котором строго различаются «голова» (первый элемент) и «хвост» (оставшаяся часть списка). Голова списка сама может являться вложенным списком.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис и парадигмы программирования ==&lt;br /&gt;
Основным принципом Лиспа является то, что исходный код программы и обрабатываемые ею данные имеют абсолютно идентичную структуру — форму списков, заключенных в круглые скобки. Программа представляет собой последовательность списков (форм), которые интерпретатор вычисляет.&lt;br /&gt;
&lt;br /&gt;
В языке применяется префиксная запись выражений: первый элемент любого списка интерпретируется как функция (или оператор), а все последующие элементы — как её аргументы.&lt;br /&gt;
Концептуальный пример базового синтаксиса:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  (+ 2 2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
В данном примере математическое выражение сложения представлено списком, где голова `+` является функцией, а числа `2` и `2` — аргументами.&lt;br /&gt;
&lt;br /&gt;
Лисп послужил основой для функциональной парадигмы. В её классическом понимании вычисления производятся исключительно путем применения функций к аргументам (без побочных эффектов), а сами лямбда-выражения выступают полноправными объектами: их можно передавать в качестве параметров, возвращать как результат или присваивать переменным.&lt;br /&gt;
&lt;br /&gt;
Однако индустриальный стандарт Common Lisp отошел от чистого функционального подхода. В него были внедрены элементы императивного программирования: блоки последовательного выполнения (конструкция `progn`), классическое присваивание переменных (`setq`) и сложный универсальный цикл (`loop`), который позволяет писать алгоритмы, концептуально схожие с кодом на языке Паскаль или Си. Кроме того, интеграция системы CLOS сделала Common Lisp полноценным объектно-ориентированным языком.&lt;br /&gt;
&lt;br /&gt;
== Ключевые функции и операторы ==&lt;br /&gt;
В развитых реализациях Лиспа присутствуют сотни встроенных функций. Наиболее важными из них, заложившими базис языка еще в 1960-х годах, являются:&lt;br /&gt;
* `t` и `nil` — системные константы, обозначающие логическую истину и ложь (а также `nil` используется для обозначения пустого списка).&lt;br /&gt;
* `car` — оператор, возвращающий голову списка. Название имеет историческое происхождение от архитектуры IBM 704 и расшифровывается как «Contents of the Address part of Register» (содержимое адресной части регистра).&lt;br /&gt;
* `cdr` — оператор, возвращающий хвост списка. Расшифровывается как «Contents of the Decrement part of Register» (содержимое декрементной части регистра). Путем комбинации этих операторов (например, `cadr`) разработчики могут извлекать элементы из глубоко вложенных структур.&lt;br /&gt;
* `cons` — базовая функция конструирования, создающая новый список из переданных ей головы и хвоста.&lt;br /&gt;
* `list` — генерирует полноценный список из переданных аргументов.&lt;br /&gt;
* `quote` — системный оператор, блокирующий вычисление аргумента (часто записывается в виде апострофа). Он указывает интерпретатору воспринимать содержимое не как код для выполнения, а как сырые данные.&lt;br /&gt;
* `eval` — фундаментальная функция-интерпретатор, которая принудительно вычисляет переданное ей значение.&lt;br /&gt;
* `cond` — базовая конструкция условного ветвления, последовательно проверяющая условия и выполняющая соответствующий блок кода при первом совпадении с истиной.&lt;br /&gt;
* `defun` — оператор для определения пользовательских функций внутри программы.&lt;br /&gt;
* `defmacro` — инструмент для создания макросов, позволяющих языку программно генерировать или модифицировать собственный код до этапа его выполнения. Присутствуют также макросы чтения, изменяющие сам текст исходной программы.&lt;br /&gt;
&lt;br /&gt;
Концептуальный текстовый пример структуры функции ветвления:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  (defun example-function (x)&lt;br /&gt;
     (cond &lt;br /&gt;
        ((&amp;gt; x 0) x)&lt;br /&gt;
        (t 0)))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Аппаратное обеспечение: Лисп-машины ==&lt;br /&gt;
В 1970-е и 1980-е годы вычислительных мощностей универсальных процессоров не хватало для эффективного выполнения ресурсоемких лисп-программ (особенно операций сборки мусора и рекурсивного обхода списков). В связи с этим в Массачусетском технологическом институте и ряде коммерческих компаний началась разработка специализированных Лисп-машин.&lt;br /&gt;
&lt;br /&gt;
Это были мощные рабочие станции (персональные компьютеры высокого класса), аппаратная архитектура которых была на физическом уровне оптимизирована для обработки списков. Они обладали встроенной аппаратной поддержкой динамической типизации и автоматического управления памятью (сборки мусора). Программное обеспечение таких машин от ядра операционной системы до прикладных программ писалось исключительно на Лиспе. Лисп-машины первыми в мире получили передовые технологии: многооконный графический интерфейс, управление мышью, световые перья и качественную графику.&lt;br /&gt;
&lt;br /&gt;
Однако к началу 1990-х годов стремительное развитие микропроцессорной техники (стандартных процессоров архитектуры x86 и RISC) привело к тому, что обычные компьютеры, выполняющие программные трансляторы Лиспа, обогнали по производительности специализированное аппаратное обеспечение, и Лисп-машины вышли из употребления.&lt;br /&gt;
&lt;br /&gt;
== Применение ==&lt;br /&gt;
Исторически Лисп доминировал в академической среде как язык для проектирования систем искусственного интеллекта. В настоящее время его коммерческое применение сузилось, однако язык продолжает использоваться в качестве мощного встроенного макроязыка (скриптового движка) во многих программных комплексах:&lt;br /&gt;
* Система автоматизированного проектирования AutoCAD (диалект AutoLISP).&lt;br /&gt;
* Текстовый редактор Emacs (полностью расширяемый с помощью диалекта Emacs Lisp).&lt;br /&gt;
* Профессиональный графический редактор GIMP (встроенный язык Script-Fu).&lt;br /&gt;
* Аудиоредактор Audacity.&lt;br /&gt;
* В 1990-е и 2000-е годы язык применялся для скриптования логики в некоторых трехмерных компьютерных играх.&lt;br /&gt;
* В университетах диалекты Scheme и Racket массово применяются в курсах компьютерных наук для изучения основ функционального программирования.&lt;br /&gt;
&lt;br /&gt;
== Достоинства и критика ==&lt;br /&gt;
Главным достоинством языка является его математическая элегантность, возможность глубокого метапрограммирования (написания программ, которые пишут другие программы) и гибкость, позволяющая адаптировать синтаксис языка под конкретную предметную область с помощью макросов.&lt;br /&gt;
&lt;br /&gt;
Ключевым объектом постоянной критики выступает специфический синтаксис языка, изобилующий круглыми скобками. В англоязычной профессиональной среде существует известная шуточная расшифровка названия LISP как «Lots of Irritating Superfluous Parentheses» (Множество раздражающих лишних скобок). Исходный код требует высокой концентрации внимания и постоянного визуального контроля за вложенностью структур, что делает язык трудным для восприятия инженерами, привыкшими к классическому структурному форматированию (как в Си или Паскале). &lt;br /&gt;
&lt;br /&gt;
Кроме того, индустриальный стандарт Common Lisp критикуется сторонниками академического функционального программирования за избыточность, громоздкость и нарушение функциональной чистоты путем внедрения чужеродных императивных конструкций. Эта тенденция отражена в шуточном «Десятом правиле Гринспена», которое гласит, что любая достаточно сложная программа на языках Си или Фортран содержит заново написанную, неспецифичную и медленную реализацию половины языка Common Lisp.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
[[Лого (язык программирования)]]&lt;br /&gt;
[[Модула]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Языки программирования]]&lt;br /&gt;
[[Category:Функциональное программирование]]&lt;br /&gt;
[[Category:История компьютерных технологий]]&lt;br /&gt;
[[Category:Устаревшие языки программирования]]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=Ii829od9Q04 Смотреть видео]&lt;/div&gt;</summary>
		<author><name>Yaroslav</name></author>
	</entry>
</feed>