В 1956 г. на Дартмундской конференции (США) Дж.Маккарти впервые предложил термин "искусственный интеллект" (ИИ). И хотя до сих пор не утихают страсти вокруг этого термина и развившегося научного направления в его рамках, исследователи единодушны в использовании языков программирования для данной области. Значительное число работ по ИИ (особенно американских ученых) реализовано на одном из старых языков программирования ЛИСПе. Этот вновь проявленный интерес к нему объясняется его эффективностью при решении задач искусственного интеллекта.
Название язык получил от английских слов LISt Processing (LISP), что означает "обработка списков". Своими корнями ЛИСП уходит в математическую логику. В 20-30-х годах такие математики, как Т.Сколем, К.Гедель и А.Черч, привнесли новые идеи в логику, которые позже воплотились в ЛИСПе. Вообще первым языком для обработки списков был не ЛИСП, а IPL (аббревиатура от английских слов "Information Processing Language" - язык для обработки информации), разработанный Г.Сайманом, А.Ньюэллом и Дж.Шоу в середине 50-х годов.
В 1956-1959 гг. Дж.Маккарти вместе со студентами Массачуссетского технологического института (МТИ) разработал новый изящный язык для работы со списками, которому и дал имя ЛИСП. Причем многие студенты внесли существенный вклад в эту разработку. В частности, Д.Эдвардс запрограммировал процесс очистки памяти от ненужных массивов, так называемой сборки мусора (garbage collection), являющийся фундаментальным понятием в ЛИСПе да и в других языках.
После своего появления ЛИСПу присваивали много эпитетов, отражающих его черты, - это язык функций, символьный язык, язык обработки списков, рекурсивный язык. С позиций сегодняшней классификации ЛИСП определяют как язык программирования функционального типа, в основу которого положен метод lambda-исчисления (метод lambda-исчисления разработан в 30-е годы А.Черчем в качестве строгой математической модели для вычисления функций).
Впервые ЛИСП, также как и ФОРТРАН, был реализован на вычислительной машине IBM704.
Программы и данные ЛИСПа существуют в форме символьных выражений, которые характеризуются в виде списковых структур. ЛИСП имеет дело с двумя видами объектов: атомами и списками. Атомы - это символы, используемые для идентификации объектов, которые могут быть числовыми или символьными (понятия, материалы, люди и т.д.). Список - это последовательность из нуля или более символов, заключенных в круглые скобки, каждый из которых является либо атомом, либо списком. ЛИСП манипулирует списками путем использования трех примитивных функций: CAR, CDR, CONS, из которых получаются все другие функции обработки списков. В функции CAR в качестве значения аргумента используется первый элемент списка; значением аргумента в функции CDR является оставшаяся часть списка после удаления первого элемента, а функция CONS собирает вновь то, что CAR и CDR разбили на части. Интересно отметить, что слова "CAR" и "CDR" остались в ЛИСПе на память от первой реализации языка на ламповом компьютере IBM704. Они являются сокращением английских слов, означающих "содержимое адресной части регистра" и "содержимое уменьшаемой части регистра", соответственно терминами, характерными для машин первого поколения.
Во многих отношениях ЛИСП отличается от других языков прежде всего тем, что выполнение программы не состоит в последовательности шагов, как в других языках. В основном ЛИСП относится к языкам интерпретирующего типа, однако в некоторых его диалектах имеется функция COMPILE, которая может использоваться для компилирования ЛИСП-программ.
Хотя языку уже под 30 лет и он имеет некоторые недостатки, включая бесконечные скобки (любимый акроним разработчиков ИИ - "масса идиотских скобок"), он остается популярным на всех этапах создания систем ИИ, в частности экспертных систем. Одна из причин этого заключается в его общности и концептуальной простоте, другая - в часто упоминаемой щедрой среде поддержки. Но его зрелость и завершенность находятся в противоречии с его стандартизацией. в настоящее время существует несколько диалектов языка, каждому из которых присущи своя степень возможностей и свои характеристики. Такими диалектами являются COMMONLISP, ZETALISP, INTERLISP, INTERLISP-D, MACLISP и др.
В 60-е годы предпринимались попытки аппаратной реализации ЛИСПа, но на уровне техники того времени эти попытки оказались безуспешными, и только в начале 70-х годов с бурным развитием техники интегральных схем появилась возможность решения этой задачи. В 1974 г. в МТИ была начата разработка ЛИСП-компьютера, в котором аппаратно реализовывался язык лисп. Этапами создания ЛИСП-компьютера явились разработки CONS-компьютера и CADR-компьютера. Появлению ЛИСП-компьютера в немалой степени в конце 70-х годов способствовали разработки экспертных систем в рамках решения проблем ИИ, когда ЛИСП-компьютеры применялись в качестве рабочих станций для конструирования и развития экспертных систем.
С 1982 г. ЛИСП-компьютеры выпускаются серийно многими фирмами: Tektronix, LISP Machines Inc., Symbolics, Texas Instruments, Xerox. В этих машинах реализованы различные версии ЛИСПа. В настоящее время ведутся работы по созданию ЛИСП-компьютера с параллельной обработкой.
В нашей стране впервые интерпретатор ЛИСПа был создан для вычислительной машины БЭСМ-6 в конце 60-х годов, затем появилась система LISP-1204 для ЭВМ ODRA-1204, разработанная на основе трех диалектов: LISP-1.5, ЛИСП для БЭСМ-6 и INTERLISP. В 1975 г. интерпретатор ЛИСПа (в основу положен интерпретатор для БЭСМ-6) разработан для ЕС ЭВМ, а в начале 80-х годов язык ЛИСП (на основе INTERLISP) реализован на много процессорном вычислительном комплексе "Эльбрус". В последние годы среди отечественных реализаций языка нужно отметить реализации FRL/ЛИСПа.
//Вычислительная техника и ее применение, N3'89