Мир Лиспа. Том 2: Методы и системы программирования [2] 5030019367, 2404010000, 5030019387, 5030013389, 9512628341

Двухтомник финских специалистов, содержащий введение в язык Лисп, методы и системы программирования. Этот язык широко из

280 86 17MB

Russian Pages 319 [322] Year 1990

Report DMCA / Copyright

DOWNLOAD FILE

Polecaj historie

Мир Лиспа. Том 2: Методы и системы программирования [2]
 5030019367, 2404010000, 5030019387, 5030013389, 9512628341

Table of contents :
Обложка
Титульная страница [стр. 3]
Выходные сведения [стр. 4]
Введение [стр. 5]
Скачок в развитии вычислительной техники [стр. 5]
Лисп — основа искусственного интеллекта [стр. 6]
Учебник Лиспа на финском языке [стр. 6]
Язык Лисп и функциональное программирование [стр. 6]
Методы программирования [стр. 7]
Среда программирования [стр. 9]
Примеры программ [стр. 9]
Развитие Лисп-культуры и Лисп-систем [стр. 10]
На кого рассчитана книга [стр. 10]
Терминология [стр. 10]
Иконология [стр. 11]
Благодарности [стр. 13]
1 Введение в методы и системы программирования [стр. 14]
Основные типы знаний [стр. 15]
Методы представления знаний [стр. 16]
Процедурные и декларативные знания [стр. 18]
Способы решения проблем [стр. 20]
Лисп предлагает различные модели [стр. 21]
Методы и стиль программирования [стр. 21]
Парадигмы программирования [стр. 22]
Литература [стр. 24]
2 Методы программирования [стр. 25]
2.1 Операторное программирование [стр. 26]
Функциональное программирование [стр. 26]
Операторное и процедурное программирование [стр. 27]
Рекурсия или итерация [стр. 28]
Рекурсивное операторное программирование [стр. 31]
Фразовое программирование [стр. 35]
Макропрограммирование [стр. 37]
Литература [стр. 38]
2.2 Программирование, управляемое данными [стр. 40]
Принцип программирования, управляемого данными [стр. 40]
Универсальное программирование [стр. 41]
Дифференцирование выражений [стр. 42]
Язык представления электрических схем [стр. 47]
Другие методы программирования, управляемого данными [стр. 51]
Программирование, управляемое событиями [стр. 52]
Литература [стр. 53]
2.3 Сопоставление с образцом [стр. 54]
Сопоставление с образцом и распознавание образов [стр. 54]
Распознавание списочных образов [стр. 55]
Условия сопоставимости [стр. 55]
Использование переменных в образце [стр. 58]
Сопоставление с переменной образца [стр. 61]
Предикатный образец ограничивает сопоставимость [стр. 62]
Компьютерный психиатр ELIZA [стр. 63]
Распознавание структур [стр. 66]
Литература [стр. 67]
2.4 Продукционное программирование [стр. 69]
Продукция = условие + следствие [стр. 69]
Интерпретатор продукций применяет продукции [стр. 70]
Полный перебор [стр. 71]
Аннулирование выбора [стр. 72]
Направление поиска [стр. 72]
Порядок перебора альтернатив [стр. 73]
Программирование методов поиска [стр. 74]
Поиск в глубину, в ширину и по наилучшему варианту [стр. 77]
Применения продукционного программирования [стр. 79]
Литература [стр. 80]
2.5 Логическое программирование [стр. 82]
Декларативная программа не содержит алгоритма [стр. 83]
Процедурная семантика [стр. 83]
Отношение является обобщением функции [стр. 84]
Унификация структур [стр. 85]
Алгоритм унификации [стр. 87]
Логика хорновских предложений [стр. 89]
Логическая интерпретация хорновских предложений [стр. 90]
Логическое определение отношений [стр. 91]
Множество предложений трактуется как программа [стр. 93]
Метод резолюций [стр. 94]
Алгоритм доказательства [стр. 96]
Реализация интерпретатора [стр. 97]
Пролог использует поиск в глубину [стр. 100]
Развитие логического программирования [стр. 101]
Литература [стр. 103]
2.6 Объектное программирование [стр. 105]
Объектное мышление и объектное программирование [стр. 106]
Объект, класс объектов и метакласс [стр. 107]
Объект содержит данные и действия [стр. 107]
Свойства и состояние объекта [стр. 108]
Действия или методы объекта [стр. 108]
Сообщения управляют вычислением [стр. 109]
Подкласс и надкласс [стр. 111]
Естественный класс и качественный класс [стр. 111]
Иерархия классов и механизм наследования [стр. 112]
Порядок наследования в иерархии классов [стр. 113]
Композиция методов в вычислениях [стр. 115]
Базовые классы и метаклассы системы [стр. 117]
Пример системы — Flavors [стр. 117]
DEFFLAVOR определяет класс [стр. 117]
MAKE-INSTANCE создает новый объект [стр. 118]
DEFMETHOD определяет метод [стр. 119]
SEND посылает сообщение [стр. 120]
Объекты моделируют мир проблемы [стр. 122]
Применимость объектного программирования [стр. 122]
Развитие объектного мышления и программирования [стр. 123]
Литература [стр. 126]
2.7 Достоинства и качество программирования [стр. 128]
Факторы качества и подходы к программированию [стр. 129]
Разделяй и именуй объекты естественным образом [стр. 132]
Используй хорошо определенные соединения [стр. 133]
Переносимость и стандартизация [стр. 134]
Другие советы [стр. 134]
Литература [стр. 136]
3. Средства и среда программирования [стр. 137]
3.1 Первичная среда Коммон Лиспа [стр. 138]
Аппаратная среда реализаций языка [стр. 138]
Составные части среды программирования на Лиспе [стр. 139]
Интегрированность и прозрачность [стр. 141]
Редактирование программ: ED [стр. 142]
Тестирование программ: TRACE и STEP [стр. 143]
Прерывание вычислений: BREAK и ERROR [стр. 144]
Трансляция программ: COMPILE [стр. 146]
Система документирования и справочная система [стр. 146]
Комментарии [стр. 149]
Средства определения количественных характеристик вычислений [стр. 150]
3.2 Среда Интерлиспа [стр. 151]
Списочный редактор — List Editor [стр. 152]
Ассистент программиста — Programmer’s Assistant [стр. 154]
Структурная печать — Prettyprint [стр. 155]
Прерывания — Break Package [стр. 156]
Прерывание вычислений и трассировка [стр. 157]
Работа с файлами — File Package [стр. 157]
Транслятор — Compiler [стр. 158]
Анализатор программы — Masterscope [стр. 158]
Справочная система — Help System [стр. 159]
Исправление ошибок — Do What I Mean [стр. 159]
Лисп с фразовой структурой — Conversational Lisp [стр. 161]
Оконная система — Window System [стр. 161]
Целостность системы — System Integration [стр. 162]
Библиотека программ — Lispusers Package [стр. 162]
Литература [стр. 163]
3.3 Среда Зеталиспа [стр. 164]
Объектная система Flavor [стр. 165]
Макрос итерации Loop [стр. 165]
Интерфейс пользователя [стр. 166]
Оконная система [стр. 166]
Интегрированные средства разработки [стр. 167]
Экранный редактор Zmacs [стр. 168]
Инспектор структур Inspector [стр. 169]
Отладчик программ Debugger [стр. 169]
Управление файлами [стр. 170]
Инспектор состояния Реек [стр. 170]
Zmail и работа в сети [стр. 170]
Языки и инструменты [стр. 170]
Литература [стр. 171]
4 Примеры программ [стр. 172]
4.1 Лисп на Лиспе [стр. 174]
Интерпретатор Лиспа на Лиспе [стр. 174]
Примитивы интерпретатора [стр. 175]
Универсальная функция EVAL1 [стр. 176]
Основная часть интерпретатора: APPLY1 [стр. 178]
Примеры вычислений [стр. 181]
Печать результатов — структурная печать [стр. 183]
Программирование диалога [стр. 184]
Программирование ввода и вывода [стр. 185]
Литература [стр. 188]
4.2 Миксима [стр. 189]
Миксима — символьный вычислитель [стр. 189]
Действия и их порядок [стр. 190]
Чтение выражения с преобразованием в списочную форму [стр. 191]
Преобразование выражения в форму дерева [стр. 192]
Представление выражения в форме дерева [стр. 194]
Порядок обхода дерева [стр. 196]
Интерпретация и вычисление выражений [стр. 197]
Упрощение выражений [стр. 199]
Снятие скобок и вывод [стр. 200]
Диалог с Миксимой [стр. 201]
Литература [стр. 202]
4.3 Язык сплетника [стр. 203]
Исчезающие народные традиции [стр. 204]
Язык сплетника и цыганский жаргон [стр. 204]
Анализ правил и их программирование [стр. 205]
Выбор места разбиения слова на части [стр. 206]
Перевод слова и ключа [стр. 209]
Долгота и созвучие гласных [стр. 209]
Перевод слов и предложений [стр. 212]
Расширение до цыганского жаргона [стр. 214]
Литература [стр. 215]
4.4 Дарвин [стр. 217]
Структура экспертной системы [стр. 218]
Представление знаний [стр. 218]
Машина вывода [стр. 219]
Факты и правила [стр. 219]
Правила вывода базы знаний [стр. 221]
Стратегия обратного вывода [стр. 225]
Работа системы Дарвин [стр. 226]
Примеры запросов [стр. 230]
Расширение системы Дарвин [стр. 231]
Литература [стр. 232]
4.5 Солнечная система [стр. 233]
Сначала были созданы небо и Земля [стр. 234]
Окно в космос [стр. 234]
Солнце, планеты и спутники [стр. 235]
И все-таки она вертится [стр. 236]
Вращением спутника управляет демон [стр. 237]
Создание небесных тел [стр. 238]
Запуск Солнечной системы [стр. 240]
Литература [стр. 240]
5 Развитие языка Лисп и Лисп-систем [стр. 242]
5.1 История Лиспа [стр. 243]
Отец Лиспа — Джон Маккарти [стр. 243]
Обработка списков и искусственный интеллект [стр. 244]
Значение Лиспа [стр. 245]
Ранние реализации Лиспа [стр. 247]
Литература [стр. 248]
5.2 Лисп распространяется по свету [стр. 250]
Развитие Лиспа в других странах [стр. 250]
Лисп в Западной Европе [стр. 250]
Лисп в Восточной Европе [стр. 254]
Лисп в далеких странах [стр. 256]
Лисп в Скандинавии [стр. 258]
Лисп в Финляндии [стр. 260]
Литература [стр. 265]
5.3 Лисп-системы [стр. 272]
Маклисп — основной диалект восточного побережья [стр. 272]
BBN-Lisp, Xerox и Интерлисп [стр. 274]
Standard Lisp и PSL [стр. 277]
Franz Lisp [стр. 279]
NIL — New Implementation of Lisp (новая реализация языка) [стр. 280]
Диалект T Йельского университета [стр. 280]
Зеталисп Лисп-машин [стр. 282]
Вавилонская башня мира Лиспа [стр. 282]
Стандарт Коммон Лиспа [стр. 284]
Производители Лисп-машин приходят к договоренности [стр. 287]
Литература [стр. 288]
5.4 Лисп-машины [стр. 291]
Бегство из систем разделения времени [стр. 291]
Первые изготовители [стр. 292]
Успехи Лисп-машин [стр. 293]
Лисп или Пролог? [стр. 294]
Литература [стр. 294]
Приложение 1. Указатель функций и символов [стр. 297]
Приложение 2. Указатель имен и сокращений [стр. 301]
Приложение 3. Предметный указатель [стр. 309]
Оглавление [стр. 313]
Содержание первого тома [стр. 319]
Выпускные данные [стр. 320]
Обложка

Citation preview

Мир Лиспа Том 2

2 USP-МAAILМA

Ohjelmointimenetelmat ja -jarjestelmat Eero Hyvonen

Teknillinen korkeakoulu Knowledge Engineering Ку Jouko Seppanen Teknillinen korkeakoulu Laskentakeskus

КIRJАУНТУмА HELSINКI

Э.Х.Овёнен, A.Cenn1111eн МирЛисnа В 2-х томах Том 2

Методы и систеNа�

nporpcuuu�poвaни•

Перевод с финского А. А. Рейтсакаса под редакцией В. Л. Стефанюка

Москва ссМмр:t:t 1990

ББК 32. 973 Х99 УДК 681 . 1 42

Х

99

Хювёнен Э., Сеппянен А.

Мир Лиспа. В 2-х т. Т.2: Методы и системы п рограммирования. Пер. с финск. -М. : Мир, 1990. -3 19 с. ISBN 5-03-001936-7 Двухтомник финских спе�U�ЗЛистов, содержащий введение в язык Л исп, методы н системы п рограммирования. Этот язык широко известен и применяется в задачах символьной об ра бот­ ки информации, о б ра ботки естественных языков, искусственно­ го интеллекта, экспертных систем, систем логического програм­ м ирования. Изложение языка и примеры основаны на послед­ ней версии, которая станет стандартом языка. В книге п риведе­ вы конкретные задачи с ответами и решениями. Во 2-м томе изложены методы и системы программирования. Для п рограммистов разной квалификации, для всех, использующих язык Л исп.

х

2404010000 - 451 144 - 90 041(01)- 90

&&КЗ2.973

Редtuсция литературы п о N.aтeN.aтuчecкuN. наука11.

ISВN ISВN ISВN

5-03-001938-7 (русск.) 5-03-001338-9 951-26-2834-1 (финск.)

@ Tekijat ja Kirjayhtyma Оу, 1987 @ перевод на русский язык, Рейтсакас А.А., 1990

Опасность не в то.м, что .ма­ шина начинает уподобляться человеку. а в то.м, что ч еловек превращается в подобие .ма­ шины. Сидней Харрис

ВВЕдЕНИЕ • •

• • • • •

• •

• • •

Скачок в ра з витии вычи сл и тель но й техники Лисп - ос н ова искусственноrо интеллекта Уче б ник Ли спа на финском я зыке Язы к Лисп и фун кционал ьное проr рамми ро ва ни е М етоды проrрам мировани я Среда проr ра мми рова ни я П р и меры проrрамм Р а з вит ие Лисп-к ультуры и Ли сп-систем На коrо расчитана кн и rа Терминолоrи я И конол оrи я Бла rодарн ости

Скачок в ра з ви т ии выч исл и тельно й те хни ки Цель данной книги - дать читателю представление о языке программирования Лисп, символьной обработке и о мире искусственного интеллекта. Эти идеи и базирующаяся на них вычислительная техника нового поколения машин открывают дорогу новому технологическому и п ромыш­ ленному скачку. Через искусственный интел­ лект, непосредственное общение с машиной на естест­ венном языке и использование экспертных систем вычислительная техника в состоянии справиться с задачам и, котор. ы е раньше мог решить только человек. Вычислительные машины и автоматы позволяют механизировать решение как задач рутинного характе­ ра, так и интеллектуальных задач. Развитие вычисли­ тельной техники происходит скачкообразно. Скачок, наблюдаемый в данный момент, качественн ы й и более

Ваеде ние

глубоки й по своему характеру, чем все предыдущие. Системы обработки данных вторгаются в области, традиционно считавшиеся сферой деятельности челове­ ка, где для решения различных проблем требовались компетентность и знания, и меющиеся у человека. Л и сп - о с нова и ск у сстве нно го интеллекта Лисп - важнейший язык, используемый при символь ­ ной обработке и в исследованиях по искусственному интеллекту. Эти работы, начатые в США в МIТ уже в середине 50-х годов, проводилось преиму­ щественно на языке Лисп. Б6льшая часть и меющнхся на рынке программ символьной обработки, систем искусственного интеллекта и п рограмм работы с естественным языком написана на Лиспе. Многие методы, испол ьзуе­ м ые в области искусственного интеллекта, основаны на особых свойствах языка Лисп. Лисп' составляет основу для обучения методам искусственного интеллекта, исследованиям и практическому применению этой области, иными словами , Лисп вводит в мир сим­ вол ьной обработки и искусственного интеллекта. Уч е б ни к Л ис nа н а ф инс ком я зык е В основу книги положены лекции, прочитан­ /") н ые в 1981 г. на отделении общего языкозна­ А../ ния Хельси нкского университета, и серия из 11 статей , о п убликованных в журнале "Pro­ sessori" ( Процессор) в 1982-1983 гг. , а также материа­ л ы некоторых других наших публикаций. Рабочая версия книги и ее первое издание были использованы в качестве учебника в учебном центре выч ислител ьной техники фирмы Nokia (NIТEC). Язык Л и с n и фун кциональ ное n рограммирова ние В п ервой части книги, посвященной м иру Лиспа, рассматриваются важнейшие сферы п рименекия с и мвольной обработки и искусствен ного интеллекта и отличия языка Лисп от других языков п рограммирова­ ния. Изложены понятия, языковые конструкции и

Введение

7

механ измы языка. Основные методы программ ирования на Лиспе - функциональное и рекурси вное програм м и­ рование - рассматриваются более детально и система­ т ич но с подразделением типов функций и форм рекур­ сии на отдельные виды, что является новшеством по сравнению с предшествующим и публикация м и по Лиспу. Первая часть книги может испnльзоваться для самостоятельного изучения как языка Лисп, так и функционального программирования. Основой изложения нами был выбран диалект Коммои Лисп, ставши й "де-факто" промышленн ы м стандартом языка Лисп. В книге п редставлены все важнейшие языковые формы и свойства конструкци й Коммои Лиспа, а также тип ы функций и данн ых. Материал изложен не в виде справочного руководства, а в логически последовательной и поэтому пригодной жля обучения форме. Даются пояснени я для рассматри­ ваемых в книге понятий и методов, которые в справоч­ ных руководствах обычно не освещаются. В то же время сведено к минимуму количество трудночитаемой системной тех нической информации. Чтобы можно было использовать книгу и как справочное руководст­ во, в конце ее приведено краткое описание всего Коммои Лиспа. Однако изложение не ограничивается рамка м и Коммои Лиспа. П о мере надобности приводятся сведе­ ния и о важнейших свойствах и особенностях других систем и расширениях стандарта.

Методы прогр а м м иро ва ни я В этой части рассмотри м прежде всего методы, технику

и системы программировани я. Вначале познакомимся с методом програ м м ирова­ иия, основанном на использовани и операторов. Наряду с функциональным програм м и рован ием это основной используемый в Лиспе метод программирования, который поддерживает­ ся многими конструкция м и языка. Далее рассмотрим п рограмм и рование, управляемое данными, опирающееся в основном на присущую

�/.с

8

Введение

Лиспу возможность трактовать данные как программу и наоборот. Ближе к методам искусственного и нтеллекта подводит техника программ и рования, известная под названием сопоставления с образцом. Идея сопоставле­ ния с образцом состоит в распознавании данных с помощью представленных в общем виде образцов. Этот метод, в частности, нашел применение, в "понимаюi.Цих человеческий язык" автоматах и других системах. Сопоставление с образцом можно использовать в продукционном програм мировании, являющемся основным методом реализации экспертных систем. Переходя к программ и рованию систем, базирую­ щихся на логи ке, рассмотрим так называемую унифи­ кацию, или взаимное приведение двух структур к общему виду. С помощью процедур унификации и поиска построим программу, реализующую на Лис п е н ебольшой и нтерпретатор Пролога. Созданная система - это пример системы, включающей язык деклара­ тивного представления знаний, действия с которыми можно определить с помощью логических правил, не задавая алгоритмического описания этих действий, как это обычно делается в программ ировании. После этого рассматриваются включенное в состав м ногих современных Лисп-систем объектно-ориентиро­ ванное программирование и как пример такой системы объектно-ориентированная система Flavor, являющаяся расширением Коммои Лиспа. Явными аналогами объектно-ориентированной организации данных и методов программирования являются используемые в п редставлении знаний фреймовые структуры и меха­ низмы наследования в семантических сетях, процедур­ ное представление (демоны) и так далее. Объектно­ ориенти рованная модель может с успехом использо­ ваться и в системном программировании, и в моделиро­ вании. В заключение описания методов програм мирования приведем обзор языковых конструкций и методов, а также критериев, используемых при оценке стиля п рограмм и рования.

Введение

g

Среда проrраммиро вания Одно из важнейших преимуществ Лиспа перед другими языками программирования - наличие доступной из системы среды программирования, обладающей широ­ кими возможностями. Стандарт Коммои Лиспа опреде­ ляет среду програм мирования лишь в части вызова различных подсистем, не касаясь конкретно их функци­ онирования. В главе 3 рассмотрим первичную среду Коммои Лиспа и для примера наиболее развитые лисповские среды Интерлиспа и Зеталиспа. П р имеры програ мм В первой и второй частях книги приведены небольшве примеры лисповских функций и программ. Более подробные примеры програм м, дающие одновременно представление о широте сферы применения предлагаемых Лиспом и си м воль­ ной обработкой возможностей, сосредоточены в гл. 4 с целью сведения в единую систему различных конструкций и методов п рограм мирования. Чтобы дать общее представление о механизмах языка и показать применимость Лиспа в системном программировании, прежде всего напишем программу, реализующую небольшой интерпретатор Лиспа на самом языке Лисп. Програм ма Миксима нз следующего f!римера является "младшим братом" разработанной в МIТ экспертной системы Мacsyma по аналитической математике. В числе прочего п редставлен разбор выражений и обработка их в виде дерева посредством использования объектно-ориентированного п рограмм и­ рования и макропрограммирования. Примером обработ­ ки естественного языка будет небольшая п рограмма, переводящая с финского языка на осевдоязык сплетни­ ка. В этих программах в первую очередь используется традиционное функциональное п рограмм и рование. Продукционное программирование будет п роиллюстри­ ровано на примере программирования экспертной системы. В качестве примера объектно-ориентирован­ ной системы запрограммируем действующую модель Солнечной системы.

**

J()

Введеюtе

Развитие Л исп-культуры и Лисn-сис тем В конце книги приводится обзор развития языка Лисп и Лисп-систем в универс итетах, в нсспедовательс квх центрах н в п ромышленности США, а также дается представление о распространении Лисп-культуры по всему м иру вплоть до Финляндии. Отдельно будут отмечены важнейшве переломвые моменты в нстор{lи Лиспа . Книга заканчивается изложеннем историИ и направлений развития Лисп-машин и Пролог-машин пятого поколения. На коrо расч и тан а к нига Книга расчитана на учащвхся н исследователей как в области техн ических, естественны х, так н гуманитар­ ных специальностей, а также для спецвалистов по выч ислительной технике в других близких областях. Надеемся, что эта кни га будет иметь широкую сферу применення и использоваться не только в качестве учебника в университетах и высших школах , но и в качестве материала курсов повышения квалификации в п ромышленностн в для самостоятельного обучения Лиспу, а также будет полезна специалистам и псем иитересующвмся проблематакой векуественного интеллекта.

Термино.��огии В вычислительной технике время от времени рождают­ си новые понятия в термины, для которых nриходится искать или создавать аналоги на других языках, в частности на финском. Обычно в вы­ числительной технике проблем ы имено­ U оJ -' � ванн я наиболее сложны в быстро развв­ � ·�" JU1j вающи хся областях , где еще не устояг.-� лась терминология на языке-оригинале. Особенно много новых понятнА требуется и создается в программвровании и технике векусетвенного интел­ лекта, где сам по себе вопрос в основном сводится к определению и формированию понитий. ..

11

ВведеRие

N\� попытапись найти для английски х терминов ка к можно более точные и практичиые соответствия. В какой степен и зто удалое� судить читателям. Орю·и­ нальный термин дан в скобках в момент его определе­ ния или раз-ьясиенuя. Термины на ф инс.l(ом и английс­ ком языках собраны в приложении1'. Выбранвые со ответств ия, конечно, не являются наилучшими. Позтому с благодарностью прнмем все предпожения читателей, касающиеся терминологии, а также и

другие замечания и преДJiожения по содержанию книги и иможеивю м атериала. Иконмоги в

Дпя иллюстрации и. лучшего воспрввтия текста мы использовапи взятые из раЗ.Jiичвых источн и ­ ков и окрашенвые юмором символическую

графику и афоризмы. Как в тексте, так и на картинках часто повторяющимся мотивом явля­ ется дерево, которое симвопвзврует не тол ько логические и физические конструкции Л исп а, но и воплощаемые в них деревья данных и модели мира. Дерево мира, дерево данных и дерево жизни цен­ тральные сим вол ы картины мира, знаний, жизни, счастья и бл аго п о лучи я во многих странах и культу­ рах. и в пкалевале" есть большой дуб: -

Если кто там поднял ветку, Тот нашел навеки счастье; Кто принес себе верхушку, Стал навеки чародеем; Капевала 2:191-1942) Дерево всегда было важным материалом, на котором тем или иным способом основывалась техника и J) Мы, естественно, приводим не финские, а рекомендуемые нами русские эквнвапенты англиАскиж терминов. Впрочем, к ним nрименн­ мы все те оrоворкн. которые сделаны авторами книrи в отношении фи их терминов. -Лрим.ред.

�r,

Перевод Л . Бельского.

12

Введение

Лисп-машина серии Xerox 1100 и базирующаяся на Коммон Лиспе среда Соттоп Loops.

культура. Из дерева изготовлялась различные предме­ ты обихода, в том числе и вспомогательные средства, и инструменты для работы, с помощью которых в свою очередь снова дел злись новые п редметы, машины и более совершенные рабочие инструменты. В трудные времена древесные отходы добавлялась и в хлеб. Без и зготовленной из дерева бумаги не могла бы существо­ вать и современная письменная культура, в том числе и эта книга. Так и в Лиспе символьные деревья явля­ ются как инструментом и средством п рограммирова­ ния, так и обрабатываемым програм мами материалом, и з которого строятся различн ые применения, создают­ ся системы и более развитые инструменты. На дереве в его различны х формах осно­ вывается также финская хозяйственная жизнь. Однако все более важным товаром становятся наши знания и компетентность, новые возмо ж ности применения и продажи которых в виде экспертны х систем открыва­ ют методы искусственного интеллекта.

Введение

13

Говорят, что центр тяжести промышленности переме­ щается "от дерева к мысли". В этой книге п редставле­ ны те основы, с помощью которых человеческие знания и компетентность могут быть перенесены из головы в (лисповское) дерево в этом вновь возникающем, дружественном окружающей среде "деревообраба­ тывающем п роизводстве". Благодарности В процессе подготовки и написания книги нам много раз в различной форме оказывали помощь: Орри Эрлинг, Хейки Хон кио, Инесе Хасберг, Еийя .Ярвинен, Кари Каллно, Матти Карьялайнен, Фред Карлссон, Урпо Карьялайнен, А нтеро Катай­ неи, Суви Кеттула, Эрки Куреннием и, Ора Лассила, Кари Маннерсало, Клаус Оэш, Пекка Пири иен, Отто Романовски, Тапани Саволайнен, Пертти Тапола, Пекка Толонен, Эва Вильянен, Матти Виртанен и Мартти Юлёстало. Мы хотим выразить признательность за помощь в работе Юхани Карвиневу и Аннел и Карпоинеи из издательства "Кирьяюхтюмя", а также Хапну Ромппанену из Гуммеруксена. Подготовка и редактирование книги стали возмож­ ными благодаря Техническому университету и Финской Академии наук. Digi tal Equi pment Corporat ion Оу, Knowledge Engi neeri ng Ку, Nokia lnformaat i ojarje­ stelmat , Rank Xerox, Texas l nstruments и Ми н истерство образования п редоставили машинное время, технику и материалы. Благодарим Технический университет и Министерство образования за оказанную нам матери­ альную помощь.

1

Отаниеми, 1987

Авторы

Про ч ел строку, про чеА вто­ рую, закипает кровь во .м нг . й. Ру не бгрг

1

• • • •

• • • •

В3f.ДЕН�1Е

В МЕТОДЫ И СИСПМЬ1 ПРОГРАММИРОВАНИI

О сновные ти пы знани й М етоды представления знани й П роцеду рные и декларат ивные знания Спосо бы решения про б леи Л исп предлагает разл ич н ые модел и Методы и стиль программи рования Парад и гмы про грамми роваи и я Л итерату ра

Функцион и рование интеллектуальных п рограмм, с одной стороны, основано на содержащихся в системе данн ых и знаниях (knowledge), с другой - на использующем эти знания методе решения проблемы. В искусственном интеллекте в отличие от ч исленного п редставления данны х в научно-технических вычислениях для n редставления знаний. обычно используются символьные структуры. Для решения задач из области искусствен­ ного интеллекта вместо традиционного алгоритмическо­ го подхода применяются различные эвристические методы поиска реш ения. Различ ные уровни программирования задач искус­ ственного интеллекта представлены на рис. 1.1. Первая часть книги в основном относилась к уровню програм­ м и рования. Вторая часть книги посвящена методам, механиз­ мам и системам программирования, с помощью кото­ ры х реал изуются языки и средства, действительно относящиеся к работе со знаниями, такие как оболоч ­ ки экспертных систем, анализаторы языка и другие прикладвые программы. Поскольку методы программи ­ рования часто разрабатываются на основе моделей

1 Введение в методы и системы проrJIIаммироваиия

1

15

1

ГОТОВЫЕ ПРИЛОЖЕПИЯ ОБОЛОЧКИ ЭКСПЕРТНЫХ СИСТЕМ И ДР. ИНСТРУМЕНТАЛЬНЫЕ СРЕДСТВА

< ог ( сопоставь ( с dг m) ( с dг ( сопост авь ( с dг m> h ) ) ) -

[

т

( сопоставь

h) )

' ( ? ? - к - -) ' (т а к т)

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

Сопоставление можно сделать значительно более разносторонним, испол ьзуя в образце переменные различных типов. Переменпая образца получает в качестве значения некоторую часть образа в том случае, когда сопоставление соответствующего типа удалось. Пер е менвые образца буде м изображать в виде двухэлементнога списка, первый эл е м е нт которого В 0д а . отобра�ает тип сопоставл е ния, а второй имя п е ременной. Мы будем использовать переменные, соответствующие типам ? + и *·

е

,

ПЕРЕМЕННАЯ ОБРАЗЦА

СОПОСТАВЛЯЕТСЯ С

(? > пере.м енная) ( +> п ере.м е нная) (*> пере.м е нная)

п роизвольным символом непустым сегментом символов пустым или непустым сегмен­ том символов

Теперь напишем новый вариант функции СОПОС­ ТАВ Ы . При успешном сопоставлении она в качестве результата будет возвращать список пар, отображаю­ щий значения, связанные с переменными. Если в образце нет переменных и сопоставление прошло успешно, то возвращается Т. Например:

2.3 Сопоставление с об разцом

59

_( сопоставь! ' ( ( ? > х ) или ( + > у) ) ' ( до или после полудня ) ) ( (Х ДО) < У ПОСЛЕ ПОЛУДНЯ ) ) •

-( сопоставь ! ' ( ? или •> ' ( до или после полудня ) )

т

Для функции сопоставл е ния СОПОСТАВЫ нуже н допол нительный парам етр (ПАР Ы ) , который содержит соотв е тствия между п еремен н ы м и и ч астя м и образа в виде с п иска п ар: ( defun сопоставь! ( m h &op t i onal ( nары n i l ) ) ( cond ( < nu l l m) ( if ( nul l h) ( i f пары пары t ) n i l ) ) ( < nu l l Ь > ni l > ( ( equal ( car m) ( car h ) ) ( сопоставь! ( cdr m) ( cdr h ) пары) ) ( ( atom ( car m) ) ( i f ( get ( car а) ' сопоставиуель ) ) ( func a l l ( get ( car m) ' сопоставитель ) m h пары> ni l > > < t ( funcal l ; ; сопоставление с переменной ( get ( fi rst ( car m) ) ' сопоставитель ) образец • образ h перенеиная ( second ( car m) ) соответствия nары) ) ) )

Сопоставителями, как и ран ее,

б удут

2 Методы программирования

60

( dеfсопоставитель ? ( m h пары) ( сопоставь1 ( cdr m) ( cdr h ) пары) ) ( dеfсопоставитель + ( m h пары) ( or ( сопост авь1 ( cdr m> ( cdr h ) пары) ( сопоставь1 m ( cdr h ) пары) ) ) ( dеfсопост авит ель • ( m h пары) ( or ( сопоставь 1 ( cdr m> ( cdr h) пары) ( сопоставь1 ( cdr m> h) пары) ( сопост авь 1 m ( cdr h ) пары) ) )

Аналогично можно оп редел ить ти п ы со п оставления перем е нных ?>, +> и *>: ( dеfсопост авитель ?> ( m h v пары) ( сопост авь 1 < cdr m> ( cdr h > ( ac o n s v ( car h ) пары) ) ) ( dеfсопост авит ель + > ( m h v пары) < or ( сопоставь 1 ( cdr m> ( cdr h > ( добавь v ( car h ) пары) ) ( сопоставь1 m ( cdr h ) < добавь v ( car h ) пары) ) ) ) ( dеfсопоставитель •> ( m h v пары) ( or ( сопост авь1 ( cdr m) ( c dr h ) ( добавь v ( car h ) пары) ) ( сопоставь1 m ( cdr h ) < добавь v ( car h ) пары) ) ( сопоставь 1 ( cdr m> h пары) ) ) ; ; ; . . . ' ' '

ДОБАВЬ присваивает переменной или обновляет старую связь

( defun добавь ( имя значение пары) ( c ond ( ( nul l пары) < ac ons имя значение ni l ) )

2.3 Сопоставление с о б разцом

61

( ( eql имя ( caar nары) ( if ( at om ( cdar яары) ) ( acons имя ( l i s t ( cdar nары) значение ) ( cdr nары) ) ( acons имя ( append ( cdar nары) ( l i st з начение ) ) ( cdr nары) ) ) ) ( t ( c ons ( car nары) ( добавь имя значение ( cdr nары) ) ) ) ) )

Соответствия элементов образца собираются в параметре ПАРЫ функции ДОБАВЬ, кото­ рый в случае успешного сопоставления возвращается в качестве результата фун кции СОПОСТАВЫ . Сопоста в л ение с переменно й о б раз ц а Значение, связанное с переменной, можно в дальней­ шем использовать в п роцессе сопоставления. Напри­ мер, было бы естественным потребовать, чтобы все встречающиеся в образце переменвые с одинаковым и менем сопоставлялись бы с одни м и тем же значени­ ем. Чтобы иметь возможность сослаться на значение ранее сопоставленной перемен ной, мы будем испол ьзовать еще одну форму

(< п ере.менная) которая сопоставляется лишь с той частью образа, с которой эта переменная уже сопос­ тавлена. Например:

ЗеNАЯ.

_( соnоставь1 ' ( ? ( ?> х) ( w> у) ( < х > > ' ( симвоп ТОТ-ЖЕ допжен быть ТОТ- ЖЕ > > ((Х ТОТ-ЖЕ > ( У ДОЛЖЕН БЫТЬ ) ) •

2 Методы программировании

62

Направленны й справа налево уголок скобки < напоми­ нает о том, что переменная уже ранее сопоставлена. Форма < обрабатывается так, что значение перемен­ ной берется из списка пар и заменяет в образце вы ра­ жение с ( ленинград выборг ) ( выборг хельсивки ) ) )

Функция МАРШРУТ н щет путь между дв у м я городами: ( defun марырут < начало конец порядок) ( nоиск конец ( nрименимы начало ) ( l i s t начало) порядок) )

Функция ПРи'МЕНИМЬI в оз вр а щает п римен имые в данной ситуаци и:

п родукции,

76

2 Методы проrра ммирования

( defun nрименимы ( состояние) ( mapcan l ' ( l ambda ( nравило ) ( i f ( eq состояние ( саг nравило ) ) ( l i s t nравило) ni l ) ) •продукции•> >

Рассматриваемая далее функция ПОИСК в nараметре ПЛАН содержит потенциально применимые в текущи й момент продукции. Искомое конечное состоя ние сохраняется в nараметре КОНЕЦ, а марш рут строится в параметре РЕШЕНИЕ. Если конечный город первого правила из списка ПЛАН совпадает с конеч н ы м состоянием., то поиск удалея и шаг за шагом сформированн ы й в параметре РЕШЕНИЕ маршрут из состояний можно выдать в качестве решения. Однако список нужно сначала перевернуть, поскольку он строился в обратном порядке. Функция РЕШЕНИЕ состоит из исследованных функцией ПОИСК городов в порядке и х п рохождения и необязательно отражает маршруты между городами. ( defun nоиск ( конец nлан реwение nорядок) ( c ond ( ( nul l nлан ) n i l ) ( ( eq конец ( sec ond ( саг nлан ) ) ) ( геvегsе ( c ons конец реwение ) ) ) ( ( membeг ( sec ond ( саг nлан ) ) реwение) ( nоиск конец ( сdг nлан ) реwение nорядок) ) ( ( nоиск конец ( funcal l nорядок nлан) ( c ons ( sec ond ( саг nлан ) ) реwение) nорядок ) ) ( t ( nоиск конец ( сdг nлан ) реwение nорядок) ) ) )

2.4 П родукционное программирование

77

По иск в r.пуб и н у, в ши р и н у и п о наи .п уч ш е му в а рианту Мы уже попыта.пись опреде.пить функцию ПОИСК в гибком и, испо.пьзуя функциона.пьиую абстракцию, в весьма общем вИде. Наибо.пее важные способы поиска, т. е. поиск в r.пубину (depth-f i rst), поиск в ширину (breadth-f i rst) и поиск по наилучшему варианту (best-f i rst) отличаются друг от друга л и ш ь тем, в каком порядке изучаются состояния п ространства поиска. Это свойство абстрагировано в функциона.пь­ ный аргумент ПОР.ЯдОК. Значением этой функции в каждой ситуации будет список анализируемых продук­ ций (ПЛАН) в порядке, соответствующем способу поиска. Порядок состояний при поиске в глубину определя­ ется следующим образом: ( defun в-гпубину ( пnан ) ( append ( nрименимы ( second ( car nnaн ) ) ) ( cdr nnaн) ) )

В процессе поиска сначала изучаются состояния, непосредственно следующие за первы м состоян ием. Таким образом, поиск осуществляется в п ространстве поиска сначала в глубину, и возврат происходит пос.пе исследования наиболее далеких состояний. _( мар�рут ' стокгопьм ' выборr ' в- гпубину)

( GТОКГОЛЬК ХЕЛЬСИНКИ ТАЛЛИНН ЛЕНИИГРАЛ ВЬ160РГ) А

в�

/Г\ с D E F G� 1

1

1

1

1

При поиске в ширину снача.па изучаются все состояния каждого уровня н лишь прсле этого происходит переход на б6ль­ шую глубину. В функции упорядочи вания это означает, что в каждом состоянии достижимые из первого состояния воз­ можности помещаются в конец плана:

78

2 Методы п рогра ммирования

( defun в-wирину ( nлан ) ( append ( сdг план) ( nр именимы ( second ( саг план) ) ) ) ) ( ма�рут ' ст окгольм ' выборг ' в-�рину) ( GTOKГOfib И ХЕfiЬ СИНКИ ТАЛfiИНН fiЕНИНГРАЛ В ЫБОРГ >

_

При поиске по наилучшему варианту вся последова­ тельность состояний вновь упорядочивается по векото­ рому критери ю так, что сначала в каждом состоянии всегда изучаются наилучшие варианты продолжения: ( defun наилучwий ( nлан ) ( soгt ( append ( nрименимы ( саг план ) ) ( сdг план ) ) l ' крит ериА) ) SORТ это общая функция упорядочивания Коимои Лиспа и КРИТЕРИЯ некоторый двуместнll(Й преди­ кат, определяющий порядок двух состояний1J. Предположим, например, что мы предпочитаем сначала более северные маршруты и что географичес­ кая ш ирота городов хранится в виде их свойства ШИРОТА. В этом случае КРИТЕРИЯ мож о определить следующим образом: -

-

( defun критерий ( х у> ( > = ( ge t ( second х > ' wи ро т а ) ( get ( second у> • wирота ) ) )

( se t f ( ge t • хельсинки ' мирота ) 4 ) ( s e t f ( ge t ' стокгольм ' 111И рота) 1 > ( setf ( ge t ' таллини ' wирота> 2 ) ( setf ( get ' пенивrра4 · �рота) 3 ) ( set f ( g e t ' выборг ' wирота) 5 )

1) Хотя nорядок оnределяется на состояниях, однако сортируются оnераторы. -Прим. nерев.

2.4 П родукционное п рограммирова ние

79

_( марwрут ' стокгопьм ' выборr ' наипучыиА ) < GTOKГOfib H ХЕfiЬ GИНКИ fiЕНИНГРАд ВЫБОРГ )

Использование этого способа поиска дает результат, отличный от результата, получаемого при испол ьзова� нии поиска в глубину и поиска в ширину. При попытке сначала выбрать более северные варианты, будет найден второй возможн ый вариант решения, который совсем не исследует Таллинн. С помощью представленного выше алгоритма поиска можно осуществить и другие способы, заменяя лишь параметр ПОР.ЯдОК. Более сложные функции могл и бы, например, делать предваритель­ ную оценку различных направлен и й поиска и для повы шения эффективности даже искл ючать некоторые альтернативы. Опас­ ность таких coкpa щ a ющ иx (pruni ng ) эврис­ тик заключается в том, что можно отверг­ нуть и такую альтернативу, которая позже может оказаться верной. В самом худшем случае могут оказаться выброшенн ы м и вообще все решения задачи. В принципе в функции ПОИСК способ поиска можно было бы менять динам ически в зависимости от ситуации, заново определяя параметр ПОРЯДОК перед каждой его передачей. Такие данные и решения, принимаемые о способе их обработки, называют .метазнаниями ( meta knowledge) .

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

80

2 М етоды программирования

ции не обязател ьно влияет на другие продукции или интерпретатор п родукций. Для увеличения эффектив­ ности интерп ретатор продукций и связанное с ним соп оставление с образцом можно реализовать и в виде транслятора, который иреобразует продукции и связи между н и м и непосредственно в лисповские фун кции. Для п родукционного програм мирования создано м ножество языков и средств разработки систем, основанных на обработке знан и й (Planner, Conniver, OPS, Rosi e, EMYCIN, KAS, Ex p e rt и др. ). Больши нство из них реал изованы как встроен ные в Лисп расширения языка. На продукционном програм м и ровани и частич­ но основано и излагаемое в следующей главе логическое п рограм м ирование и язык Пролог. Обычно продукции лучше всего приме­ н и м ы для представления простых ассоциа­ ций вида наблюдение-действие. Механизм человеческой компетентности и оп ыта часто можно удовлетворитель­ но смодели ровать на поверхностном уровне без содер­ жательного отображения глубинной сути, значения и причинны х связей между явлениями. Продукционное п рограм м и рование используется как метод п редставле­ н и я знан и й и п рограм мирован ия в разработке эксперт­ н ы х систем. Для ком п енсаци и ограничений, присущих п родукционному программировани ю, его можно комби­ н ировать с други м и методами програм м и рования и п редставления данн ых. Ли тер ату р а 1 . Barr А. , Cohen Р. , Feigenbaum Е. The Handbook of Artificial Jntelligence, Vol. 1-3, Pi t man, Lon­ don, 1981-1982. 2. Bucbanan В. , Duda R. Pri nci ples of Rule-Based Expert Syst ems. Stanford Univers i t y, Heurist ic Programming Project, Report НРР-82-14, Stan­ ford, 1982. 3. Davis R. Expert Systems Where are We? And Whe­ re Do We Go from Here? Мassach uset ts Inst i t ute of Technology, Al Laborat ory, Memo 665, 1982.

2.4 П родукционное проrраммнрованне

81

4. Hayes-Rot h F. Kпowledge Based Expert Systems. Computer, October, 1984, рр. 263-273. 5. Hayes-Rot h F. , Wat ermaп D. , Leпat D. Building Expert Systems. Ad­ di soп-Wesley, Readi пg, Mas­ sachuset ts, 1983. [Имеется перевод: Хейее-Рот Ф. , Уотерма н Д. , Ленат Д. Построение э к спертных систем. -М. : Мир, 1987 . ] 6. Нуvбпеп Е . Asiantuntijajarjestelmien tietamys­ tekniikka. Kпowledge Eпgi пeeri пg Ку, Helsi пki, 1986. 7. Gevarter W. , Ап Overview of Expert Syst ems. Nat i oпal Bureau of Staпdards, Report N BSI R 82-2505, October 1982. 8. McDermot t J. A. А Rule Based Coпf i gurer of Com­ puter Systems. А/ Journal, Vol . 19, 1982, рр. 39-88. 9. N i lssoп N. Principles of Artificial lntelligence. Tioga, Palo Alto, Cal i forпia, 1980. [Имеется пе­ ревод: Нильсон Н. Ис к усс твенн ы й интелле к т. Методы поиска решений. - М. : Мир, 1973 . ] 1 0 . Pearl J . Heuristics. lntelligent Search Strategies for Computer ProЫem Solving. Add i soп-Wesley, Lопdоп, 1984. 11. Shor1 l i f fe Е. Н. Computer Based Medical Consul­ tations: MYCI N. Ameri caп Elsevi er, New York, 1976. 12. Sussmaп G. J. , McDermot t D. V. Why Coпп i vi пg is Bet ter t haп Рlаппi пg. Memo No. 225А, AI Labora­ tory, МIТ, Cambridge, Massachusetts, 1972. 13. Watermaп D. A. , Hayes-Rot h Р. (eds. ) Pattern-Di­ rected In;erence Systems. Academic Press, New York, 1978. 14. Weiss S. , Kul i kowski С. А Practical Guide to Designing Expert Systems. Chapmaп апd Hal l , Lопdоп, 1984.

2 Методы nроrраммировавия

Я .мыслю . сл едо вательно. я

сущ ествую .

Д ек а рт Я не .м ысл ю. сл едо ва тельно,

не существую.

я

Г. Л и хте н. берг

2. 5 .ПОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ • • • • • •

• • • •

• • • • •

Д екпаративная программа не СОАер ж ит ап го ритм а П роцеА)'рная семант ика Отношение явпяется обобще ни е м ф у н кци и Уни ф икация структур Апгорит м у ни фи кации Логика хор новски х п реАn о жени А Логич еская интер п ретация хорновских п реАJJ ожен и А Логи ч еское о преАеnе ние о т но ше ни А М ножеств о п реАn о жени А тра ктуется как п рогра м ма МетоА ре з оп юц и А Апгоритм Аоказатепьства Р еап и за ци я и нтерпретатора П ропог ис п опьзует поиск в гп уби ну Ра з в и т и е п оги чес кого п рогра м м иро в а н и я Ли тера тура

Фу н к ци я - это отображение из м ножества опредеп ени я в м н ожество значений . В Ли с пе с в ы числе н и е м фу нк­ ции н еразр ы вно связано на п ра вл ение : фу нк ци я попучает аргумент ы и возвращает значение. То же с амое изоб ражение фун к ции не позволяет в " перевер ну­ том напра ВJi ении " в ы числять значения аргументов исходя из з н ачения фун к ции . Эта несимметрич ность п роисте к ает из того, что п исповс к ие функции, к а к и н аписа н н ы е н а традиц и онн ы х яз ы к ах п рограмм ы , об рабат ы вают да нны е в поряд к е, зада ваемом описани­ ем м горитма, несмот р я на то что эту последователь-

2.5 Лоrи..еское nроrраuмкрование

83

иость можно в Лиспе отобразить весьма гибкими и общими формами. Такие Jlзыки назовем процедурны..ми яэы.ка.ми (procedural language). В п роцедурных язы ках в формализмах програм мирование и решение п роблем сводится в основном к разработке алгоритма, выполня­ ющего действия. Д е �л а р ат ивн а я про гр амма не содерж ит а л го р и тм а " логических языках, известны м п редставителеи которых является Пролог, алгоритмы в таком смысле не используются. Если функциональные и операторные языки описывают, " каким образом" решается .. векоторая задача, то в логических языках для ее решен ия достаточно точного логического а описания. .Языки, в которых решение задачи получают нз описания структуры и условий задачи , называют декАаративны.ми яэы.ка.ми ( decl a­ rat i ve language ) Декларативные формализмы отвечают на вопрос "что". Поскольку в декларативной п рограмме последова­ тельность и способ выпол нения п рограм м ы не фиксиру­ ются, как при описани и алгоритма, п рограмм ы могут в принципе работать в обоих направлениях. Например, чисто логическая п рограмма, нап исанная на Прологе, может на основе исходных данных вычислить резуль­ тат, но и с тем же успехом без допол нительного п рограм мирован ия на основе результата - исходные данные. В

i..J

.

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

2 Методы п роrраммироваиия

84

механизмов, лежащих как за естественным, так и за формальным языком, полезно для использования языка. В этой главе мы рассмотрим, каки м образом в Лиспе осуществляется программ и рование, похожее на описан ное выше декларативное програм мирован ие. Идея декларативного програм мирования попучипа наибольшее развитие в так называемом логическом программировании ( logic programmi ng), где деклара­ тивный смысл структур вы ражается в логических предпожен�ях, и их процедурная интер­ п ретация основана на специальных an гo­ в 1 rrOIOg ритмах доказательства теорем. В Лиспе возможностей логического программиро­ вания можно добиться, запрограм мировав алгоритм доказательств. В дальнейшем мы для примера реализу­ ем небольшой интерп ретатор Пропога. Но сначала рассмотрим понятие отношения, унификаци ю ( uni f i­ cat ion) выражений и основы логи ки. От но ш ение явл яется о б обще н ием функции Отноше ни е ( re l a t io n) оп ределяется как подм ножество пря моrо п роизведения (х) множеств. Например, сложение двух целых положительных чисел можно п редставить в виде отношения между м ножествам и целых чисел (Nt, N2 и NЗ) R

е

N1

х

N2 х N3

где n1+n2=n3 и ni nринадлежит м ножеству Ni. Оrноше­ ние можно и явно представить как множество троек: R = {(1 1 2). (1 2 3). (1 3 4)



. . .

}

Это отношение имеет три численных аргум е нта, т. е. оно является 3-местным. О-местное отношение реализу­ ет константу, 1-местное - свойство, 2-х и более местное отношение можно графически представить в виде сети. Оrношение . - это обобщение функции. Любую функцию можно п редставить в в �е отношения с помощью следующего п реобразования:

2.5 Jlоrическое проrраммироваиие

85

(fn xl х2 . . . xN) = у * (fn xl х2 . . . xN у)

Функция - это отношение, не содержа­ щее двух элементов (xl х2 . . . xN у/ ) (xl х2 . . . xN у2)

таких, что y1:;ty2, поскольку значение функции определяется однозначно. Заметьте, что у функции, представленной в форме отношения, аргументы и результат находятся в равно­ значных позициях аргументов отношения. Отношение, подобно насто Srщей функции, не содержит злементов асимметрии. В процедурных методах и языках п рограмм ирова­ ния понятие отношения используется для обозначения произвольной абстракции данных, например в языке запросов реляционной базы дан ных. Благодаря общнос­ ти, симметричности и "глобальности" на их основе можно реализовать совершенно новые декларативные языки. И если в Лиспе за основу п роrрам м и рования приняты функции и лямбда-исчисление, то Пролог основан на более общем понятии отношения и так называемой хориовекой логи ке. Унифика ция стру ктур В декларативных языках программирования и интер­ претации в симметричных формализмах испол ьзуется метод, с помощью которого можно сравни­ вать выражения и распознавать соответст­ вия их частей между собой. Этот метод называют унифu1Сациеа (unif icat ion) выражений. Унификация - это обобщение сопоставления с образцом, в котором два образца с переменными сравниваются друг с другом с целью их сопоставления в отличие от рассмотренного нами ранее со d'оставления образца с константны м образом. В результате унификации nолучается одна

2 Методы

86

nроrраммировзния

или несколько подстановок (subs t i t ut i on ) , или соответ­ ствий, т. е. м ножество связей переменных, с помощью которых сравни ваемые структуры можно сделать иденти ч н ы м и наиболее п рост ы м образом. Такая подста­ иовка назы вается наиболее общим унификатором ( most general un i f i er ) образцов (выражtн:ий). Унифици­ руя, например, образец (1 2 ( ? х))

; "Какова сумма чисел 1 и 2?"

с тройками приведеиного отношения сложения можно найти, что х=З. В этом случае унификация образцов соответствует обыкновенному вызову функции сложе­ ния. Но вычисления с помощью отношени й можно осуществить также и в другом направлении, задавая в образце сум му константой, а аргументы с помощью переменных: ( (? х) (? у) 3)

; "Сумма каки х чисел равна 3?"

Унифици руя с трой кам и отношения, можно найти ответы х=1 и у=2 или х=2 и у=1 . В этих примерах было достаточ но рассмотреиного ранее сопоставления с образцом. В следующем случае этого уже недостаточно, поскольку как в образце, так и в образе содержатся перемеи и ые. В этом случае унификация дости гается подстановкой x=D и у=В: (( ? х) Ь ( ? у) d) ( d (? у) Ь (? х))

; образец 1 ; образец 2

Обратите внимание, что nри унификации не и меет с м ы сла использовать разпичающиеся типы связывания и подстановки перемеи иых (ти п ы > и < ) , как мы это делали при сопоставлен и и образцов, здесь последова­ тел ьность связывания персменных не определяется непосредственно по сопоставляемому образцу, а динамически зависит от распознаваемого образа. Унификация дает одинаковый результат независимо от того, какой образец явл яется образоlf и какой образ­ цом.

2.5

Логическое nроrраммироаание

Ал горитм уни ф и к ации Изложим далее п ростой алгоритм унификации. В дал ьнейшем будем называть унифици руемые образцы термами. Ограничимся рассмотрением термов, которые являются либо - константны м и символам и, - переменн ы м и или - списками, рекурсивно состоя щим и из термов. Переменпая сопоставима с п роизвольным термом, и она изображается в виде: (? переменная) На унификацию двух термов можно наложить следую­ щие условия: 1) переменпая унифицируется с п роизвольным тер­ мом; 2 ) два сим вола унифицируются лишь в случае, когда они идентичны; 3) списочный терм унифицируется, если унифициру­ ются все его элементы; Унификацию можно осуществить с помощью следующей функции УНИФИЦИРУй, возвраща- ющей связи переменных, приводящие к унификации, в качестве значения:

-

( defun унифицируй ( Х J СВАЗИ ) ; ; ПытаемсА унифицироват ь т ермы х и J : ( l et ( ( х ( значение х свАзи ) ) ( J ( значение у свАзи) ) ) ( cond ; ; nеременвые унифицируются с чем угодно : ( ( nеременнаА-р х > ( c ons ( l i s t х у) свАзи ) )

88

2 Методы программирования

( ( nеременная-р у ) ( cons ( l i s t у х ) связи ) ) ; ; идентичные конст анты унифицируются : < < or < at o m х ) < at om у) ) ( and ( eq l х у) связи ) ) ; ; унифицируются гоповы и хвосты ; ; структуры : < t ( l et ( ( новые-связи � . < унифицируй ( f i гst х > < f i rst у > связи ) ) ) ( and новые- связи < унифицируй ( rest х ) ( rest у) новые-связи) } ) ) ) ) )

Связанные с переменными значения сохраняются в параметре СВЯЗИ, и их можно получить с помощью функции ЗНАЧЕНИЕ (обратите вни мание на рекурсив­ ность определения значения): ( defun значение ( х связи) ; ; Возвра�ем значение переменной х из ; ; окру•ения ( i f ( nеременная-р х ) ( l et ( ( связь ( assoc х связи : t e s t ' equal ) ) ) ( i f < nul l связ ь ) х ( значение < sec ond связ ь ) связи) ) ) х) )

Встроенная в систему Коммои Лиспа функция ASSOC сравни вает головные элементы пар в ассоциативном списке функцией EQL, которая неприменима для сравнения двух списков (на логическом уровне). Однако предикат сравне­ ния можно изменить в месте вызова с по­ мощью кл ючевого параметра : TEST, как это уже делалось ранее. Благодаря этому стано-

2.5 Логическое программироваиие

89

вится возможной работа со сп иском пар, в котором головные элементы пар п редставляют собой списки. Нам еще понадобится предикат ПЕРЕМЕННАЯ-Р, который распознает переменные: ( defun переменная-р ( х ) < and ( l i s t p х > ( eq ( fi r s t х > • ? ) ) )

Приведем примеры унификации: _( унифицируй • ( ( ? х ) с < ? у) ) • ( ( ? у) с а ) > < ( ( ? У> А) ( ( ? Х > ( ? У > ) ) _( унифицируй • ( а ( Ь ( ? х > > ( с d ) ) • ( ( ? у) ( Ь ( с d ) ) ( ? Х ) ) ) ( ( ( ? У> А > ( ( ? Х > < С D ) ) )

Обратите вни мание, что алгоритм может унифициро­ вать структуры с произвольным уровнем вложен н ости. Приведеиная выше синтаксическая унификация не очень сложна. Ситуация осложнилась бы, если бы м ы захотели учесть возможные в вы ражениях формальные свойства, такие как ассоциативность и дистрибутив­ ность операций и др. В таком случае нужно было бы признать унифицируем ыми и следующие формы: (( х + у ) + z ) и (х + ( у + z ))

Мы не будем касаться таких случаев. Логика хо рн о в с ки х п р едл о ж е н и й

Для записи отношен и й можно использовать различные формализмы. Особенно полез­ ный, общеприменимый и эффективно реали­ зуемый на выч ислител ьной машине форма­ лизм предлагает логика хорн.овских предло­ жений (Horn clause logic), которая является огран иченной формой исчисления предика­ тов первого порядка ( f i rst order pred i cate calculus).

90

2 Методы п роrра �Аtироваиия

В логике хор н о вс ки х предло жений используются только так называемые предложения Хорна (Horn clause). Их называют еще правилами (rule). В лисповс­ кой нотации хориове кое п редложение можно п ред­ ставить в следующем виде:

(р ql q2 . . . qn) ; п

2::

О

Правило состоит из заключения ( head, conseq uence) р и тела или предусловий (Ьоdу, precond i t ion) qt q2 . . qn. Заключение и элементы тела назы вают предиката­ Аtи. Как хориовекие п редложен ия, так и n редикаты можно п редставить с помощью определенных ранее термов. Несмотря на внешнее сходство, преди каты н ел ьзя п ута т ь с хорвовекими предложениями. Преди­ кат это �писок, первый элемент которого и мя преди ката, и далее следуют аргументы: .

-

-

(pred al а2 . . . ап) Аргументы ai я вл я ются тер м а м и , т. е. константами, переменными или составленными из них списками. Л о гичес к а я и н терпретация хорновских п редложени й Под декларативной интерпретацией преди ката ( pred at а2 . . . a n ) в качестве отношения подразумевается, что между аргу м ентами at . . an и меется отношение pred. или что (at а2 . . . an ) принадлежит отношению pred. Напри мер: .

(сумм а 1 2 3) ; истина , поскольку ( сумма 1 2)

(су п руги Фипиn Элизабет)

=

3

Хо рио в е ко е же п редложен ие (р qt . . qN) интер­ .

..11 претируется как логи ч еская имплика-ц ия: нЕсли ... преАИК8ТЫ qJ , . . . , qn ИСТИ НИЬI, ТО И П реАИКаТ р вует

истиненн. Хориовекое предложение соответст­ програм м ировани и продукции:

в п ро.�tукuиониом

2.5 Ло:rическое проrраммирование

91

ЕСЛ Н ql и q2 и . . . qn ТО р

Предполагается, что все переменвые в хориовеком предложении охвачены квантором всеобщности. Специальным видам хорновских п редложений, в которых заключение или тело ложны, придается следующая интерп ретация; Если тело (условие) пусто, то п равило вс е гда истин но, является фа1СТОА4 (fact) и обозначается: (р) Например : (( су мма 1 2 3))

Если заключение пусто или ложно (ni l ) , то м ы и меем всегда ложны й предикат: (nil (су мма 1 2 4))

; с у мма 1 и 2 не равна 4

Логичес кое определение отношени й С помощью хорновских предложений можно опреде­ лять отношения в гибкой и и нтуитивно попятной форме правил. Например, отношение ДЕДУШКА можно было бы определить с помощью правила "у является дедушкой х, если z я вляется одн и м из родителей х, и у есть отец z " следующим образом: ( ( дедуwка ( ?х ) ( ?у) ) ; гопова ( родитепь ( ? х> ( ? z ) ) ; тепо ( от ец ( ? z) ( ? у ) ) )

Оrношен ие РОДИТЕЛЬ можно оп ределить с помощью следующих предложений: ( ( роднтепь ( ? х > ( ?у > > ( отец ( ? х > < ? у ) ) )

гопова т е по

92

2 Методы проrраммирования

Рис. 2:5. J Д ерев о р о дства . ( ( родитель ( ? х ) ( ? у) ) ( мать ( ? х ) ( ? у) ) )

голова тело

Об ласть действия переменных - всегда лишь одно п редложен ие. Отношени я ОТЕЦ и МАТ Ь могут быть фактами, которые задаются в ви де перечисл ения отношений. Например: ( ( от ец mart a mauno ) ) ( ( от ец mauno juho ) )

2.5 Логическое программирование

( ( мать marta l eena) ) < < мать mauno anna ) )





93



М ножество п ре дложени й т р акт уется ка к п рогр амма Эти предложения образуют м ножество п равил, в котором все использованные отношения перечислены или определены через другие отношения или рекурси в­ но через сам их себя. Для такого м ножества хорновских п редложений можно оп редел ить п роцедурную интер­ п ретацию. Програм ма, написанная на Прологе, образуется просто из множества хорновских предложений: ( setq программа ' ( ( ( дедуwка ( ? х> ( ?у) ) ; правипа ( родитепь < ? х) < ? z ) ) ( отец < ? z ) ( ? у) ) ) ( ( родитепь ( ? х > ( ? у) ) ( отец ( ? х ) ( ? у ) ) ) ( ( родитепь ( ? х ) ( ? у) ) ( мать ( ? х ) ( ? у) ) ) факты ( ( отец mart a mauno ) ) ( ( отец mauno juho ) ) ( ( мать marta l eena) ) ( ( мать mauno anna) ) ) )

Программа запускается путем передачи ей в качестве вопроса и для припятня решения некоторого п редика­ та, например: ( мать marta leena) (1) ( р одитель marta (?х)) (2)

Ответом будет либо логическое значен ие (1), л ибо связи переменных заданного вопроса, при которых предикат исти нен (2): =Ф

Х

=

MAUNO или Х

=

LEENA

2 Методы nроrраммнроаання

Программа работает в обоих на п ра вле ни я х: ( родитель (? р е б е но к) mauno)



РЕБЕНОК = MARTA

В общем п рограм му, состоя щую из логических предло­ жений, можно считать рел я ц ио н но й базой дан н ы х, в которой дан ные и п рограмм ы представле н ы в виде термов. Программе ( базе данных ) можно задавать вопросы, касающиес я запи санных в ней от н ошений. И вопросы - п редложения той же формы. Одинак овая форма п редставления дан ных и програм м ы дает воз­ можность об рабаты ва ть прологовскую п ро гра м м у на Прологе таким же образо м , как и в Лиспе. Определяя системное множество полезных и необходимых преди­ катов с побочн ы м эффектом, таких как предикаты ввода и вЫ вода, арифметические опера ц ии и другие, можно логику хорновских п редложений превратить в самостоятельный язык п рограм мироваи ия.

М ето д р е золюц и й Остановимся далее более подробно на принципе работы интерпретатора Пролога. Доказательство в случае хор н о в ских предложений основываетс я на методе резолюцt:tй ( reso l u t i on) (Robl п· son 1965). Для доказательства методом резолюций м ножество п редложений сначала приводится к так называемой конъюн кти вной нормальной форме, в которой из п редложен ий удалены кванторы существо­ вания, импли кации и эквивалентности: cl и с2 и с3 и . . . cN

Здесь п редложения ci м о г ут содержать л и ш ь связки "или" и отрицания. Предпола­ гается, что переменвые связаны кваитором всеобщности.

В методе резолюций использ уется

дока­

п ротивного. Предло жение доказывается добавлен ием его отрип:аии я с зател ьство

от

2.5 Jlorв'leCICOe помощью с вязки "tt' к

жений

nроrраммировавие

известному множеству предл�

(не с) и cl и с2 и . . . cN н приведением такого м ножества п редложений путем

применени и правила резолюции ( reso l ut ion rule) к Правилом резолюции

логическому противоречию. ивляется фо р м а: ((не р) или ql )

и

(р или q2)



(qJ ил и q2 ) В результате при менен ия п равила получается новое сокращенное множество предложений, называемое резольвентой ( resolvent). П равило применяется повтор­ но до тех пор, пока множество п редложен и й не будет редуцированно до л ог и ч ес ко го п ротиворечия:

(не р) и р А, А

Для

=>

В

использования

метода

резолюций,

В чтобы исключить и м пликацию м ежду заклю­ чекнем и телом, хориовекие п редложения

предварительно и реобразовываются в конъ­ юнктивную нормальную форму по следующему логи­ ческому правилу:

p • ql и q2 и . . . qn •

р и (не ql ) и (не q2) и . . . ( не qn)

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

2 Методы nроrраммирования

96

nil и (не х) ; отрицание докаэЬlваежого предиката ; факт (1)

pl pn

и

(не ql)

и

. . . (н е qk) и . . . (н е qm) ; правило (2)

Противоречивость показана, когда найдеиное предпо­ женке (x�pl) является фактом (1). Если с р связано тело (2) (x�pn), то п ротиворечивость можно доказать, nоказав п ротиворечивость каждого отрицания (не qk), к=1 . . m из тела. Это можно осуществить рекурсивно таки м же образом, как и для первоначального предпо­ жен ии (не х). Теперь изучаются лишь предпожения с заключениями qk: .

qk и (н е wl) и . . . (не wn)

; n = 0, /, 2, . . .

Рекурсия заканчивается на фактах. Поскольку в обрабатываемом п редикате и хорнов­ ском п редложении могут быть переменные, то заключе­ ния п редложений сравниваются с предикатом с по­ мощью попытки их унификации. Так на каждом шаге получаются соответствия между переменными и термами, которые действуют и в дальней шем. В процессе осуществления доказательства множество соответствий дпя переменных разных предложений все возрастает и часто становится опосредованны·м . Мож­ но, например, требовать, чтобы значение переменной х одного п редпожения было бы таким же, как значение у векоторого другого предложения, а значение у в свою очередь определяется на основе векоторого третьего п редложения. Механизм соответствует передаче параметров традиционных языков. Алгор итм доказательства Описанный ранее простой способ дока­ зательства позволяет интерпретировать в виде п рограмм ы описание, образуе­ мое из логических предпожений. Представим его далее в немного более уточненной форме. Доказываемый в

97

2.5 Логическое программироваиие

настоящий момент п редикат-теорему назовем целью (goal). Цель можно доказать следующим алгоритмом: 1.

Найти для доказательства цели первое п редложе­ ние, закл ючение которого унифицируется (uni fy) с целью. 2. Если п редложение с таким закл юченнем не найде­ но, то доказательство не удалось. Если п редложе­ ние найдено и его тело пусто, то цель док�зана. Если у п редложения не пустое тело, то надо дока­ зать его предикаты в качестве новых целей рекур­ сивно слева направо. 3. Если алгоритм зашел в тупик, т. е. доказательство не удалось, то надо вернуться (backtrack) в п реды­ дущее место, где можно выбрать другую цель если такая имеется) и продолжить доказательство >.



Подбор связей переменных основан на методе п роб н ошибок и на поиске. Доказываемый в настоящий мо­ мент предикат пытаются унифицировать первым возмо­ жным способом. Если решение окажется неверным, т. е. некоторый предикат позже не удастся унифицировать, то п роисходит возврат к предыдущей унификации, вы­ бирается следующая из еще имеющихся возможностей, и делается попытка унифицировать оставшиеся п реди­ каты другим способом. Реализация инте р п р етато р а Описанная ранее п роцедура доказатель­ ства предложений образует п ростой и н­ терпретатор Пролога, который м ы далее запрограм мируем на Лиспе. Основной цикл интерпретатора Про­ лога можно реализовать так, как это показано на следующей странице. Интерпретатор выводит знак вопроса и ожидает ввода пользователем доказываемых п реди катов. t) Имеется в виду другое пред.пожение, заключение которого унифицируемо с целью. -Лрим. перев. 4 З а к. 547

2 Методы

98

проrраммироваиия

( defun pro l cg ( nрограмма)

( progn 11 ? " ) ( pr i nc ( do ( ( nредикаты ( re ad )

( re a d ) ) )

( ( eq nредикаты ' конец) ' конец)

( дока•и

предикаты ' ( 0 ) ) ) nрограмма 1 )

( l i s t ( поменяА-имя ' ( ( основа) )

( pr i nc " ? " ) ) )

Встречающиеся в н и х перемен в ы е переи меновываются в у н и кальные и м е н а функциеif ПОМЕНЯR-ИМЕНА:

( defun nоменяА-имена ( терм уровень) ; ; На саqом уровне имена упикапьuые ( cond ( ( nepeнei:ftaя - p терм) ( append терм уровень) ) ( ( а\оа терм) терм) (t, ( cons ( DOMemiA-•tмeвa ( first терн) уровень ) ( noмeiUifl-имeвa ( rest терм) уровень) ) ) ) ) ·

П р ед и кат ПЕРЕМЕННАЯ-Р уже нами оnредепеи. В дальнейшем с помощью ч ислен ного п ар а м ет ра УРОВЕН Ь можно будет отличить связи одноименных переиеииых из различных правиJ1:

_( noмeRSifl-икeиa ' ( ( родКтепь marta ( ? х) ) ) ' ( 0) ) ( ( Р0аитЕl1Ь ИАRТА ( ? Х 0 ) ) J Введенные пользователем предикаты доказываются ДОКАЖИ на следующей с1 ран нце. В начале окружение связей пе ре м е н н ы х СВЯЗИ

функцией

nусто. Ч ер ез параметр ПРОГРАММА передается не­ пользуемая п рограм ма на Прологе. Когда с помощью функции ДОКАЖИ-КАЖДЫй предикаты доказа н ы ,

2.5 Логическое nроrраммирование

99

( defun докuи

( nредикаты связи nрограмма уровень ) ; ; Дока.и nредикат в тек�м окружении ( cond ( ( nul l nредикаты ) ( выведи-связи связи связ и ) ( pr i nc " Е�? ( д/н ) " ) ( eq < read ' н) ) ( t ( докажи-каждыА nрограмма nрограмма ( rest nредикаты) ( first nредикаты ) связи уровень ) ) ) )

функцией ВЬIВЕДИ-СВЯЗИ в ка ч естве результата выводятс я значения связей переменных п реди ката верхнего уровня и пользователю задается вопрос, желает ли он через механизм возвратов найти добавоч­ ные решения. Через аргументы функ ц и и ДОКАЖИ­ КАЖДЫЯ пе реда ются используемые в про цесс е доказательства предложения, вся п рограмма на Проло­ i'е, еще не доказанные п редикаты, п редикат, доказыва­ емый в настоя щий момент, связи переменю.Iх и уро­ вень: ( defun докажи-каждыА ( остат ок-nрогр nрограмма остаток-пред nред связи уровень ) ; ; Докажи nредикцты с возвратами ( if ( nul l остаток-nрогр ) ni l < le t. •

( ( теорема ( изменяА-имеиа ( f irst остаток-прогр) ( l i s t уровень ) ) ) ( новые-связи ( унифицируА пред ( first т еорема) связи ) ) )

4*

2 Методы программирования

100

< c ond ( ( nul l

нов�е-связ и ) ( докажи-каждый ( rest остат ок-прогр) программа остаток-пред пред связи уровень ) ) ( ( докажи ( append < re s t теорема) остаток-пред ) новые-связи программа ( + уровень 1 ) ) ) ( t ( докажи-каждый ( rest остат ок-прогр) программа остаток-пред пред связи уровень ) ) ) ) ) )



Идея функци и состоит в том, что еще не унифицированные п редикаты содержатся в параметре ОСТАТОК-ПРЕД и связи переменных уже унифицированных пре­ дикатов - в параметре СВЯЗИ. Если п редикат можно непосредственно унифицировать с некоторым фактом п рограмм ы или с таки м п равилом, заключение которого унифици­ руется с доказываемым п редикатом ПРЕД, то вызыва­ ется ранее описанная функция ДОКАЖИ. Используе­ мую функцию унификации УНИФИЦИРУй мы уже описали ранее. В мом�нт вызова уже унифицированный п редикат удаляется из списка ОСТАТОК-ПРЕД и в качестве окружения берется полученное в результате унификации новое окружение НОВЫЕ-СВЯЗИ. Кроме этого, п редикаты из тела п равила добавляются (вызов APPEND) к списку nодлежащих доказательству преди­ катов ОСТАТОК- ПРЕД П роло г использ у ет п о иск в гл уб ину В нашей п рограмме предикаты из тела добавляются ( вызов APPEND) в начало доказываемых п редикатов. Это означает, что в доказательстве п редполагается использование поиска в глуби ну, т. е. всегда сначала

2.5 Jlоrическое проrраммироваиие

101

исследуются предикаты из правил, находящихся в цепочке или дереве доказательства на более глубоком уровне. В принципе новые предикаты, подлежащие доказа­ тельству, можно было бы добавить и в конец списка. Это привело бы к поиску в ширину, при котором всегда сначала доказываются предикаты более н изкого уровня. Последовательность :• :, 1�·:�:\. доказател ьства имеет значен ие для .:; :: :-_ используемых в программе на Прологе преди катов с побочным эффектом (вы- ..Р ·:· вод, ввод и др. ). Даже эффективность выполнения программы обычно зависит от того, описана ли проблема в форме, эффективной с точки зрения удобства доказательства. В програм миро­ ван ии на Прологе можно выделить два этапа: сначала пытаются решить проблему логически на декларатив­ ном уровне; после этого рассматривается, как и в какой последовательности разработанная программа правильно решает задачу, и делается попытка оптими­ зировать определение. Поиск основан на методе проб и ошибок. Програм­ ма все же в состоян и и справиться со сделанными ранее ошибочными выборам и. Две последние ветви предло­ жения COND в функци и ДОКАЖИ-КАЖДЫй реализу­ ют необходимый для возврата механизм. Если предика­ ты из тела правила, заключение которого унифицирова­ но, не удастся унифицировать рекурсивным вwзовом ДОКАЖИ, то рекурсивный вызов из последней ветви дает новую возможность, пока все предложения программы не будут переп робованы для унификации с доказываемым предикатом. Лишь после этого в предло­ жении IF предикат (NULL ОСТАТОК-ПРОГР) станет исти нной. ·

·

-

.....

�f .-

,,.

·

Развитие ло rического про r раммиров ания Метод резолюций вместе с унификацией, nоиском и связанным с ними механизмом возврата образуют основу используемой в Прологе техники программиро­ вания, Аогичес�еого програ.м..м.ирования (logic program­ mi ng).

102

2 Методы nроrраммироваи101

Логическое программирование возникло в начапе 70-х годов как продолжение исСJiедований по машинно­ му доказательству теорем, осущестВJJяемых в области искусственного интеллекта. Исследования основыва­ лись на классической математической логике и достиг-­ ли наибольшего успеха в результате разработки принцива резолюции, оказавшегося особенно удачным д.11я программирования на вычислительной машине. В !Нtчале 70-х годов Ковальски разработал теорию использоJJания логики в качестве языка программиро­ вания (Kowalski 197 4, 1979). Одновременно Колмероэиз университета Экс-Марсель реализовал nервый р Л q основанный на логике язык программиров:ыия (Colmerauer et al. 1973, Roussel1975), который Р V q бьJ.II назван Прологом (ProgJ·ammation еп "'Р logique, Programming in logic). Однако пра1стическое примеяение Пролог получил лишь, когда Уоррен (1977) создал для р :::> , КОРАБЛЬ определить следующи м ароматом:

( deff l avor корабпь ; класс ; ; перенеиные экземпляра ( имя х у х- скорость у- скорость) ( дви•�ееся- тсло ) ; надклассы : gettaЬle-instance-variaЬles ; ре•имы :settaЬle- instance-vaгiaЫes>

п одроб не е.

У объектов КОРАБЛЬ в виде свойств есть ИМЯ, координаты местонахо;.щения Х ;� У, а также компоненты с ко рост н Х-СКОРОС:ТЬ и У-СКОРОСТЬ. Кроме этого, объ екты на­ сл едуют другие с вой с тв ен ные объектам класса ДВИЖУШЕЕСЯ-ТЕЛО свойства и действия. К режи мам мы д.aJiee в ер нем с я

MAKE-JNSTANCE создает новый объект На основе определения класса мы можем создавать новые экземпляры (iпstance), принадлежащие данному классу. Это осуществляется в ы зо в ом МAKE-INSTAN­

CE:

(MAKE-INSTANCE

класс )

Напри мер, с помощью класса КОРАБЛЬ можно создат ь судно: (se t q корабль1 (make- i nstance ' корабль ) )

Поскольку позже м ы хотим сослаться н а создан н ый объект, то присваиваем его значение переменной КОРАБЛЫ. Переменным экземпляра можно во время вызова дать значение. По нашему определению одно из свойств ко рабл я - это перемен­ пая экзем пляра ИМ.Я. Ей можно присnо­ ить значение в мо ме нт вызова:

8.... �

2.6 Объектное проrраммнрованне

119

( setq кора6�ь78 ( make - i ns t ance 'кора�ь ' : имя ' t i t ani c ) )

Переменпая КОРАБЛЬ78 - это внешнее имя для ссылки, которое, наnример, используется служащим порта или п рограм мистом в модели порта, в то же время TIТANIC - это свойство, связанное с сами м судном, как прикрепленная к нему табличка. Каждое из них можно изменить, но только различными спосо­ бами. DEFFLAVOR реализован в виде сложного макроса, похожего на форму DEFSTRUCT Ком мои Лиспа. Побочным эффектом его вызова будет автоматическая генерация необходимых функций доступа, которые можно использовать в объектно-ориентированном чтении и присваивании значений переменным. Побоч­ ным эффектом, возникающим в связи с генерацией объекта, можно управлять посредством следующих, необязательно задаваемых в определении, ключевых параметров (режи мов). Режим : GEПABLE- I NSTANCE-VARIABLES приво­ дит к генерации системой методов, читающих значения переменных экземпляра ( в примере: ИМЯ, :Х, :У, :Х-СКОРОСТЬ и :У-СКОРОСТЬ). 2. Режим :SEПABLE- INSTANCE-VARIABLES приво­ дит к генерации методов для п рисваивания новых значений переменным экземпляра. Методы присваи­ вания значения имеют форму : SET-x, где х -имя переменной экземпляра. Например, имя метода, присваиваемого переменной ИМЯ, будет : SЕТ-ИМЯ. 1.

DEFMETHOD определяет метод

Определение класса метода пол ьзователя п роизводится формой DEFMETHOD: (DEFMETHOD (класс тип-.метода .метод) ля.мбда-список. фор.ма)

2 Методы прогр амм ирования

120

DEFMETHOD связы вает оn ределение класса с методом оnределен ного ти nа, который вызы вается с аргумента­ м и , задаваемы м и лямбда-сn иском. Телом метода я вляется n роизвол ьное выражение. В оnределени и обыкновен ного метода nараметр тип­ метода не исnол ьзуется. О н n редназначен для опреде­ ления n ред- и nостдемонов. Т и n демона вы ражается кл ючевым и словам и :BEFORE и :AFТER ( n ред- и nостдемо н ы) . Для других сnособов ком nозиции сущест­ вуют с вои кл ючевые слова. Наn ри мер, для объекта класса КОРАБЛЬ можно оn редел ить метод :СКОРОСТЬ, который выч исляет скорость судна: ( defmethod ( корабль : скорость ) ( ) ( sqrt (+ < • х-скорость х-скорость ) < • у-скорость у-скорость ) ) ) ) SEND посылае т сообщение Кроме nеречислен ных ранее методов чтения и nрисваи­ вания перемен н ы м экзем nля ра теnерь можно объектам тиnа КОРАБЛЬ nосылать и сообщение : СКОРОСТЬ, которое возвращает в качестве значен ия скорость объекта ( в этом случае у перемен­ ных экземnля ра объекта Х- СКОРОСТЬ и У-СКОРОСТЬ, отображающих ком nоненты скорости, должны быть значения). Сообщение nосылается формой SEND:

m

(SEND объект .м ет о д &REST аргументы)

Объект это объект, котором у посылается сообщение метод с данн ы м и аргументами. Получающий сообщение объект акти визи рует соответствующий ему метод и возвращает значен ие тому, кто nослал сообщение. Пример на следующей стра н и це. Механизму nередач и сообщений соответствует у н иверсаль н ы й вызов n р и меняющего функционала FUNCALL, передающего вызы ваем ы й м етод вместе со своим и параметрами объекту, и нтерnрети руемому как -

2.6 Объектное программирование

121

_( send кора6ль78 ' : им я ) ; им я дано объекту ; п р и создании _(send корабль78 ' : sеt-нм я 'BORE > BORE ; дается новое им я ( send корабль78 ' : им я ) ; спраwнвается имя TITANIC

BORE

( send корабль78 ' : s е t -х- скорость 3.0) ; прнсванвается х-скорость _( send корабль78 ' : sеt-у- скорость 4.0) 4. О ; н у-скорост ь _( send корабль78 ' : скорост ь ) 5. 0 ; спраwнвается ско р ость

З.о

функциональный объек т:

(FUNCALL объект метод &REST аргуме нты) Е сли м ы хоти м кроме кораблей образов ы вать и другие движущиеся тела и выч ислять и х скорость, то можно использовать более общи й тип объекта, наприме р ДВИЖУЩЕЕСЯ- ТЕЛО. О пределенные для объекта КОРАБЛЬ перемен ные экзем пляра Х, У , Х- СКОРОСТЬ, У- СКОРОСТЬ и метод : СКОРОСТЬ можно теперь перенести в определение класса объектов Д ВИЖУЩЕ ­ ЕСЯ- ТЕЛО, в этом случае их не надо вно.в ь перечис­ лять в определениях подклассов. Достаточно сослаться на их принадлежиость надклассу ДВИЖУЩЕЕСЯ- ТЕ­ ЛО, например: (defflavor н по (наблюдение); добавочная переменная (движущееся-тепо) ; н а дкп а сс

... )

Свойства и де йствия надкласса расп ространя ются автоматически на объе кты подклассов. Н ап р и м е р, в определени и НЛО нужно перечислить л и ш ь те свойства (переменная экземпляра НАБЛЮДЕНИ Е ) , кото р ые отличают его от других дви жущихся тел. Соответственно можно оп ределить другие классы, например: ВРАЩАЮЩЕЕСЯ- ТЕЛО, КРУТЯЩЕЕСЯ-ТЕ­ Л О, КАТЯЩЕЕСЯ- ТЕЛО, СТАЛКИВАЮЩЕЕ СЯ- ТЕЛО ·

122

2 Меrоды nроrраммироаания

и для каждого из них характерные переменвые экземпляра и действия. Так можно построит ь семанти­ ческую модель механики твердых теп.

-

Объекты модепи р уют м и р про блемы В объектном програм мировании строение объекта и е го действия можно описать как еди ное целое. С войства, за в и симос т и и поведение реальных объектов так же, как их состоян ия и зак оно м ер н ости, теперь, как п ра вило , можно зап рограммировать во многом более адекватно решаемой задаче . Мо деп ирова­ нне реальных объектов с помощью активных объектов вередко более естественно, ч ем с помощью о босо бленных и пассивных чисел и других дан н ых, обработка которых осущес­ твляется со стороны. Блаi'Одаря внешнем у воздействию свойства объек­ тов и и х с о сто я н и е могут и зменяться в соответствии с дейст в ител ьностью и объекты могут сами реагировать и возде й ство в ать на окружающую среду. О н и могут испытывать внешнее вл и я н и е и раздражен ия, самосто­ ятельно и нтерпретировать получаемые сообщения и влиять н а другие объекты. Их можно н а бл юдать , и н а основе их состояния и и х деятел ьности делать выводы. П р им е н и м о с ть объе ктн ого программирования Характерно то, что объектное п рогра м м и рование становится тем более необходи м ы м , чем больше раЗJiич н ых типов данн ы х испол ьзуется в программе и чем дли ннее становятся програм мы. Вы годнее объеди­ нять действия с объектами дан ных, чем хранить их отдел ьно, поскол ьку обычно способ обращения с да н н ыми зависит от их представления и строения. Например, действие сложения вы полняется по­ р аз но м у для ч исел разл и ч н ых типов, матриц и некото­ рых других математических объектов. В то же время способ записи действия и абс тр а ктно е его з начен и е сов п ада ют. Поэ то м у естественно выделить для каждого ти па специфические с войства, треб уе м ые в вычислени­ ях от о пера ндо в различных типов, и определить о б щие

2.6 06ъектное nроrраммированне

123

свойства сложмия с помощью общего для них метода более высокого уровня. Предпосылкой объектного п рограмми роваиия яВJiяется прояснеиве и анализ основных поиятий проблемного м ира. Однако объекты, зависящие от целевой системы, и отн ошения между Н И М И МОГУТ быть СЛОЖНЫМИ И трудНО различимыми. В качестве примера боль­ шой системы можно упомянуть естествен­ ный язык и семантику его понятнА. Одна­ ко анализ понятий ямяется частью лrсбой задачи независимо от ее области. Объектное мышление п риводит к естественной модул ьности програм м, при которой м ежду разл и чны­ ми частя м и системы существуют ясные и естественные интерфейсы. В объектном мышлени и вопрос состоит не в ч исто теорети ческих или программно-технических тонкостях. Это прежде всего практический образ мышления , который применим к решению рамичных п роблем и п роекти рованию разных систем. Особенно хорошо nонятие объектов nодходит для системного п рогра м м и­ рован и я в моделирования, в которых часто встреt:зют­ ся параллельные процессы. Фактически объектное п рограммирование как раз и я вляется методологией системного анализа и проекти рования , которая кроме идей моделирования и проекти рования содержит необходимые для практическоrо использования язык представления данных и средства программи рования.

@

Раз ви ти е объектного м ышлен ия и п ро гра ммирова н и я Объектное мышление было выработано в результате плодотворного взаимного влияния моделирования, представления данных и системно го п рограммирова­ ния. Первый раз nонятия объектов и классов был и использованы в языке Симула (Dahl et al. 1971). Класс (class) Симульr - это обобщение блока (Ьlock) Алгола. Как и блок, он соде р жал локаль н ые пе р еменньrе, определения п роцедур, а также основную nрограмму. После этого путем ссылки на класс можно было

124

2 Методы программирования

создавать соответствующие определен1110 конкретные объекты (object i nstance). У каждого класса был характерный для него набор свойств (at t r i bute), перемен ных и п роцедур. У каждого объекта были соответствующие классу свойства, но индивидуальное состояние (state) и управление (cont rol state). Объекты Си мулы можно сч итать зап ися ми ( record), которые кроме данных содержат и п рограмму, и ее состоя н ие. С другой стороны, его можно считать активизированн ы м в проЦессе выч ислен и й блоком языка с блочной структурой, который не исчезает после того, как его поки нет уп равление, ожидая возможного возврата управления. У объектов и классов С имулы, однако, � были свои ограничения. Новые типы объектов ( классы) нельзя было оп реде­ лять и нельзя было изменять набор свойств уже существующих объектов -во время счета, т. е. после трансляции п рограм м ы. Взаи модействие между объек­ там и огран ичи валось передачей управления и парамет­ рам и. В С молтол ке (Goldberg и Кау 1976, lnga l l s 1978, Goldberg и Robson 1982) состав поняти й объектного подхода и методы п рограм м и рования были развиты гораздо дальше. Я зык и его реал изация целиком п остроен ы на объектах и классах. Однако и в С мол­ тол ке были свои огран ичения и п роблемы. Не совсем удач н ы м был си нтаксис языка, и не вполне эффектив­ н ы м и были его реализации. Серьезное содержательное ограничение С моЛтолка состояло в том , что наследование с войств основы ва­ лось на древовидной иерархии, в которой объект мог п р и н адлежать л и ш ь одному надклассу. На п рактике объекты могут принадлежать нескольким различным классам в зависимости от того, с какой сторон ы их рассматривать. Напри мер, морковь может быть расте­ нием, п и щей ил и п родукцией, корабл ь может быть средством передвижен ия или и грушкой и т. д. Вещи можно рассматри вать с разл и ч н ы х точек зрения (vi ew) и с позиций их разл и ч н ы х ролей ( role).

2.6 Объектное проrраммнрование

125

В принципе в объектно-ориентирова н н ом п рограммирован и и н аряду с объе�тно й .моделью (object model ) С молтол_ к а разли ча­ ют .модель а�торов (actors) Х ьюита. Модели нем ного отличаются друг от друга порядком управления. Е сли в объектной м одели объ­ ект обычно возвращает ответ отправителю (sender) сообщения, то в м одел и с испол н и­ телями объект передает его следующему объекту, который продолжает выч ислен ия. В Л испе объекты можно считать обобщением списка свойств. С писки свойств с самого н ач ала испол ьзовал и для сохранения как значен и й , так и определен и й фун кци й. Первым и на­ стоящим и расширен и я м и в направлен и и объектного п рограм м и рован ия были, пожа­ луй, фреймовые формал и з м ы Минского (Mi nsky 1975), м н огоокон ная с истема Ин­ терл испа (Tei tel man 1977) и пакет EXTEND Маклиспа (Kerns 1980). Даже язык Ада в Ада Байрон. пекоторой мере опи рается на объекты ( package). Особенно удачно объекты были реал изова н ы в системах Flavors Зетал испа (Wei nreb и Moon 1981) и Loops Интерл испа (Bobrow и Stef i k 1983). В этих сделанных для Л исп-маш и н системах удалось решить и снять с повестки дня м ногие из п роблем, стоя в ш и х перед более ран н и м и попытками. Loops это реал изо­ ван н ы й в Интерл испе рабоч и й язык высокого уровня с м ноги ми паради гмам и , объекты которого параллел ьно содержат еди ные средства процедурного, событи йного и п родукционного програм м и рован ия. В Зеталиспе объекты сначала испол ьзовались в оконной системе и в реал изации поддержки одновре­ менных сеансов. О кна были удачн о оп ределены в виде объектов, каждый из которых должен обладать формой, размером, позицией, и менем, содер­ жимым, способом изображен ия и други м и дан н ы м и о состоянии. Исследован ие состоя н и я окон и работа с -

2

326

Методы о.роrрамми ровання

нкми п роизводятси с п омощью од н и х и тех же методов. Действия -с ок н ам и осу щестВJJ ялись с помощью управ­

сообщений, передаваемых им с кл авиа туры , от ипи из пр оrраммы, и при водящ и х к желаемым результатам. Одн а ко вскоре оказал ось, ч то ароматы универсальны - и их вкп ючили в язык. Объект ный п о д х од в Лисп е бы стро з а в ое вал п о пу­ пярность как в си с тем н ом , так и в п ри кладном п ро r­ рамм ировании. В связи с объектами речь и дет не _ о н ово м и м н о госторо н н е м типе данных, а о друго м способе о р га н изаци и п рограм м ы и д а н н ы х , в ко т ором как пассивные дан ные, так и оп ределенные для н и х действо объеди няются в единое целое. В Ли с п е объекты можно реализовать с помощью с п иска объ е к т о в и п рименяющих функцианалов (AP­ PLY, FUNCALL). В более новых Лисп-системах средства объектного п роrрам м и рования уже содержатся в cиcтeмe (DEFLAVOR, DEFMEТНOD, SEND и др угие ). В определение Ком м он Лиспа (Stee l e 1984 ) объек ты н е входят, но в системе они и меются. nющи х М'ЬIШИ

Л итератур а

Bobrow G. , S t ef i k М. The LOOPS Manual. Xerox PARC, Pa l o Alto, Ca l'i forп i a , 1983. 2. Сапnоп H. l . F l avors: А Nonhi erarchical App ro a ch to OЬjec t - Ori e nt e d Progra m m i пg. f) "!"!. Unpub l i shed paper, Al Labora!ory, М!Т,

1.

"Х.

4. 5.

6.

Massachuset ts, 1982.

3 . Dahl 0. -J. , My h rh a u g В. , N ygaard К. Si muta 67 Common Ba s e La n g ua ge . Nor­ weg i a n Comput i ng Ce n t re, 5-22, Oslo, 1971. Go l d Ьerg А. I ntroduc i ng t he Sma l l t a l k-80 S yst e m . Byte 6: 8, August, 1981 . Gol d berg А. , Кау А. Smatltalk-72 Jn.struciion Manual. Xero x PARC, Pato A l t o , Cali fornia, 1976.

Goldberg А. , Robson

D . Smalltalk-80 - The Lan­ guage and its /mplementation. Add i son-Wesl ey, Readi ng, Massachusetts, 1 982 .

2.6 Объекткое ароrрамr.nqюааиие

7.

8.

9. 10. 11. 12. 13. 14. 15.

Hewi t t С. , Bishop Р. , St e i ge r R. А U n i versal Mo­ dular Actor Formal i sm for Art i f i c i a l I ntel l i gence. Jn Advance Papers of the Third /JCA/-73, Los Al tos, Wi l l i a m Kaufmann lnc. , Pa l o Al t o, 1973, рр. 235-245. Ingal ls D. H. The Sma l l t a l k-76 P rogr a mm i ng Sys­ tem: Design and lmplemen tat i on. Conference Record of the 6th А СМ Symposium оп Principles of Programming Languages, Tucson, Ari zona, 1978, рр. 9-16. Ke r n s R. W. EXTE N D Package for Mac l i sp. AI La­ borat ory, МIТ, Ca mbri dge, Mass a c h u s e t t s , 1 9 8 0 . Mac Le n n a n B. J. Va l ues a n d Obj ec t s i n Program­ m i ng La nguages. SJGPLA N Notices, Vol . 17, No. 12, рр. 70-79. Mi nsky М . А Frarnework for Represent i ng Know­ ledge. In W i n s t o n Р. ( ed. ) : The Psychology of Computer Vision . .М.cGraw- H Ш , New York, 1 975. di Pri m i o М. , Christal ter М . А Poor Man's Flavor System. Worki ng Paper No. 47, I ss c o , Geneve, 1 983. Tei t el ma n W . А D i s p l a y Or i e nt e d P r o g r a m m e r s Assistant . Proceedings of the 5th JJCAI. Cam­ bri dge, Massachuset ts, 1 977, рр. 985-91 5. Wei nreb D. , Moon D. A. Lisp Machine Manual. Symbol ics l nc. , Cambri d ge , Massach uset ts, 1981. Wei n re b D. , Moon А. М. l n t rod uc t i on t o Usi ng the Wi ndow Sysfem. Al LaЬoratory, МfТ, Cambri dge, .Мa ss a chus e t t s, 1 981 . '

128

2 Методы программирования

Смысл вычислений заключен не в числах, а в подходе. р. х э.м.минг Смысл програ.м.мирования за­ ключен не в коде, а в пони­ мании. Авторы

2. 7 • • • • •



ДОСТОИНСТВА И КАЧЕСТВО ПРОГР�ИРОВАНИЯ

Фа к тор ы к ачества и подходы к пр огр а м м и рован и ю Раз д е ля й и и м енуй об ъе к ты естественны м об разо м И с п ол ь зу й х оро ш о определ енны е соединен и я П е ре но с и м ость и стандарт и зация Д ругие с о в еты Л и т е р а т ура

Методы и стил и п рограммирования для раз­ л и ч н ы х задач nрименяются по-разному. Одна­ ко н езависимо от исnол ьзуемых стиля и метода существуют общие достоинства и n р и н ци n ы , о которых всегда nолезно nомн ить. В n рограм м и рован и и содержатся также эстетичес­ кие и п рактические. цен ности. Хорошую n рограмму можно читать как стихи, и она может привлекать как п есня, м уз ы ка или п рекрасная картина. Каждый п рогра м м ист на своем оnыте знает, что он ощущает каждый раз, когда n рограм ма нач и н ает работать. Еще большее интеллектуал ьное удовлетворение можно получить, найдя хорошее решен ие трудной задачи. Наилуч шие образцы n рогра м м и рования n редставля ют собой творческую науку и искусство. В этой главе мы рассмотрим общие nодходы, влия ющие на качество n рограмм, а также nереч исл и м сч итающиеся обыч н о nолез н ы м и n р и н ц и n ы и nрактиче-

2.7 Достоинства и качество п роrрамми рования

129

ские приемы програм м и рования. Эти п равила и ограни­ чения позволяют избежать плохого стиля програ м м иро­ вания, но, с другой стороны, о н и не должны стать препятствием для творческого поиска новых решени й , исследования и экспериментирования. Ф ак торы качес т ва и п одходы к п рогра ммир овани ю Про факторы качества и цепи п рогра м м и рования и п рограмм м ного п исалось, а также делалось м ного попыток их выделения и анализа. В общем виде под качеством п рограм м пони м ается то, н а­ сколько хорошо они соответствуют установлен­ ным для них требованиям. (spec i f i ca t i on ) и сколь ВЫСОIЮ установпена план ка этих требован и й . Факторы требован и й и их вес в свою очеред ь могут меняться в зависимости от случая. В общем случае о н и даже и ногда проти воречат друг другу. Увеличение размеров систем и усложнен ие п рограм­ мирования предъявляют все бол ьш и е требования к качеству программ. Автоматизация п рогра м м и рован ия и автоматический синтез программ по оп исани я м также предъя вляют требования к испол ьзуем ы м языку и методам програ м м и рования. В связи с эти м нет возможности и необходи­ мости детально разл ичать вопросы качества и методов. Удовлетвори мся переч исленнем наибо­ лее важн ых качеств и связан н ы х с н и м и подходов : 1 . Корректность (co rrec t ness). В первую очередь программа должна п равил ьно работать. О ш и боч­ ную програм му невозможно использовать, даже если у нее будут другие полезные свойства. Доказател ьство и обеспечение корректности п рограм м обычно тем более сложно, чем бол ьше и сложнее сам и п рограм мы. (Здесь н адо отметить, что наибол ьшая работа в области автоматического доказате11.ьства корректности (provi ng) п рогра м м проделана и м е н н о в рам ках Лиспа. ) 2. Надежность (re l i abi l i ty). Програм м ы искусствен­ ного интеллекта не всегда дают верные решения нз-за наших недостаточных или ош ибочн ы х

А1

5 З а к 547

2 Методы программирования

130

знани й об области применения или из-за испол ьзу­ емых в решениях эвристик, хотя технически п рограмм ы и н е содержат ошибок. Тесно связанн ы м с корректностью свойством является надеж- ность. Программ и рование п риобретает все большую общественную знач имость, и поэтому работа п рограммиста может быть связана с большой ответственн остью. Стои мость ошибки, п роявившейся в програм ме обычно тем больше, ..-. чем позднее обнаружена ошибка и чем шире используется п рограмма. 3. Полезность (vа l i d i tу). Верно работающая п рограм­ ма не найдет своего применения, если она не решает задачу пол ьзователя и не соответствует его ожидан иям. Разработка п рограмм ного обеспе­ чения и его испол ьзование могут, наприме р , о казаться эконом ически убыточн ы м и . 4 . Эффективность (ef f i c i ency). Хорошо, когда п рог­ рам ма функционально эффективна п о памяти и времени выпол нения. В ычислительная машина традиционно я влялась критически м ресурсом. Однако эффекти вность п рограмм и рования становится все более важн ы м фактором. Как п рави­ ло, сначала пытаются создать п рограм му как можно быстрее и п роще и л и ш ь после этого сосредоточиваются на вопросах, связан ных с эффективностью, если это вообще потребует­ ся. 5. Удобоч итае.Аtость ( readab i l i t y) и поиятиость п рограмм. Помимо автора и другие должны быть п р и необходимости в состоян и и понять с мысл программ ы и ознакомиться с текстом раl!iотающих функций (и п рочей документацией). Обычно п рограм м ист сам вскоре забы вает приня­ тые решения, и ему нужно вновь откры­ вать их для себя. С увел ичением среднего размера п рограмм все бол ьшее их коли­ чество приходится создавать коллектив­ н ы м и усил и я м и, чем еще больше подчер­ кивается значимость удобочитаемости.

1

2.7 Достоинства и качество проrраммирования

131

Тестируеяость (testab i l i ty) и корректируемость. Тестирование п рограм м � п роверка и х корректнос­ ти - часто более объемная работа, чем их написа­ н ие. Плохую п рограмму вередко легче сделать заново, чем выпол нить тести рование и коррекцию. 7. Отлаживаеяость (debuggabi l i ty). Почти во всех уже оттестированных программах позже находятся ошибки или непременно возни кают какие-нибудь потребности внести исправления. П рограмм ы нужно создавать так, чтобы п озднее б ы л о п росто локализовать и исправить ошибки. 8. Сопровождаеяость ( m a i nta i nab l l i ty). Програ м м ы часто нужно изменять и рас ш ирять, напри мер в связи с изменен иями во внешнем м и ре. У п ракти­ ческих п рограм м часто долгая история разработк и и количество усилий, необходимое для сопровож­ дения, возрастает по мере увел ичения ч исла и размера испол ьзуемых п рограм м. 9. Переносияость (portab l l i t y). Маш и н ы и техн ичес­ кие средства развиваются и дешевеют быстрее, чем п рограм мы. Поэтому п рограмм вое \...� .. обеспечен ие должно быть легко переноси1J81f51!\. м ы м на новые и более дешевые маш и н ы и из одной среды в другую. 10. Адаптируеяость (adaptab l l i t y) и модифнцируе­ мость. Изменение со временем требова н и й к програм мам требует их легкой модифицируемости, учитывая разл и ч н ые цел и испол ьзования и управляемость модифи каци я м и . Програ м м вые системы и их части полезно п роекти ровать незави­ симыми друг от друга и оп ределять их и нтерфейсы четко и локально. Так п рограм м ы получаются более общи м и , и их можно испол ьзовать как строительный материал в разл и ч н ы х областях применения. 6.

Обычно у п рограм миста по оп ыту нап исан и я п рогра м м уже есть некоторое чувство действен н ости п рограм м и их других качественных факторов. Однако это чувство и нтуитивно и его ощущение и надежность во м ного м зависят о т п редлагаемых языком средств, стиля 5*

2

132

Методы n рогра ммирован ия

програ м м и рован ия, а также от основных испол ьзуем ых реше н и й и м етодов. Рассм отр и м далее немного подробнее, какими с редс.тва м и и п ри н ципами может дости гаться качество. При ведеиные н и же и нструкци и не подчиняются векое­ му единому стил ю и не перечисляются в порядке их значи мости. Это тол ько п риблизительный набор общих одобряем ы х всеми п р и н ципов и уни версальных п равил, хорошо зарекомендовавших себя на п рактике. Раз д еля й и и м ену й о б ъе к ты естественны м о б раз о м

Достижение разл и ч н ы х факторов качества п рограмм ы в о м ногом зависит о т удачного выбора решения задачи и общей структуры п рограм мы. Это тем важнее, чем больше п рограм ма, о которой идет речь. Форм ирование п рограмм ы и ее отдел ьных частей, поиятиость и управляемость можно улуч шить, разбивая задачу на абстрактные един и цы и естественные части и испол ь­ зуя при этом для составля ющих наглядные и мена: t.

Пытайся разбить задачу на части естествен н ы м образом, объединяя п р и этом дан н ы е с той частью, которой они принадлежат. П ытайся отдел ить дан н ы е от кода п рограм м ы и включить их в отображение п роблемной области. ШО Пытайся использовать общепримен и м ые м етоды и абстраги ровать дан н ые в соот­ ветствии с н и м и. 2. Не п и ш и функции дл иннее, чем их можно вообразить и ощутИть как единое целое (на листе А4 или в окне на экране). Луч ше всего, если функции будут коротким и и подходя щим образом сгруп­ п и рован н ы м и как с точ ки зрения логической последовател ьности , так и с точки зрен ия иерархии поняти й. Испол ьзуй уровни абстрак­ ции и образуй по мере необходи мости подходящие ком плексы из поняти й. 3 . Испол ьзуй меткие и характерные имена, которые не взяты наугад, не сл и ш ком специфи ч н ы или общи, а которые характеризуют см ысл или назначение. Читател ь, изучая логику п рограм м ы , не должен



2.7

Достоинства и качество п рогра м м и рован и я

133

запоминать специал ьно, какое и м я , см ысл или значение имеет переменная. Предпочтител ь н ы и мена и терми н ы н а естественном языке и близкие задаче, например МЕ СТо- ВОЗВРАТА, ДОКАЗЬI ВА­ ЕМОЕ-ПРЕДЛОЖЕНИЕ, ПРИЛАГАТЕЛЬНОЕ и т. д. 4. Придерживайся какой-нибудь с истемы в испол ьзо­ вани и и мен. Например, динамически вычисл и м ы е переменвые можно помечать п ризнаком, скажем, звездочкой: •ГЛАС Н ЫЕ•, •БАЗА-ДАН НЬIХ• и т. д. 5. Не используй для различных объектов одинаковые ил и схожие и мена, а для одного и того же объекта разли ч н ые и мена, даже если это технически воз­ можно. Используй для аналоги ч н ы х целей анало­ гич н ые и мена. Испол ьз у А хоро ш о определенн ые соединения Работа различных частей п рограм м ы должна быть понятна вне зависи мости от ее других частей, и взаи­ модействие должно происходить через хорошо опреде­ ленные интерфейсы. ( i nt erfa�e) и протоколы. ( prot oco l ) . П р и рассмотрен и и маленькой части кода п ро грамм ы сразу должна быть ясна ее роль и значе­ ние с точки зрен ия всей п рограм м ы как целого, т. е. программы должны быть прозрачны..ми ( t raпsparent). Работу функции или других объектов желательно понимать и иметь возможность управлять ею без знани й о работе или состоян и и других объектов и зависеть л и ш ь от эффекта оп ределяющей формы. Еще некоторые советы:

ок

Пытайся разбить задачу так, чтоб ьi взаи модействия ее частей м и н и м изировались, и при разбиен и и факторы, вл ияющие на состоян и е и поведение отдельных частей, предпочтител ьнее оставлять вliутри их, чем снаружи. 2. Не передаnай дан ные п рисваиванием и х перемен­ ным вне фун кци й и других объектов, когда это не я вляется естественн ы м , а испол ьзуй п араметры и передавай данные через п редоставляемые оп ределя­ ющи м и формами средства и механ изм вызоза. 1.

2 Методы п роrра ммирова ния

134

3.

Избегай решений, которые приводят к знач итель­ н ы м побочным эффектам.

Пере н ос и мо ст ь и ста ндартиза ция П ытаясь достич ь переноси м ости, нужно избегать испол ьзования в п роrрам м и рован и и функци й н меха­ низмов кон кретной систем ы. Между некоторы м и с истемами существуют преобразо�J 111. ватели (в Зеталиспе, например. lnterl isp r; .S\ Compat i bl l i t y Package). Однако п реобразо­ вани я не покрывают весь язык и не всегда правильно действуют. Ком мои Лисп - это важн ы й шаг в сторону стандар­ тизации Лиспа, совместимости с истем и переносимости п рограмм нога обеспечен ия, но на п рактике испол ьзу­ ются и будут в дальней шем ис пол ьзоваться разл и ч н ые верс и и и рас ш и рения язы ка. Ком мои Лисп - это не последнее слово, хотя в его оп ределении и предусмот­ рены расши рения.

Q

Д ругие с о веты

Далее приведем еще некоторые универсал ьные п рави­ ла, касающиеся конкретны х форм, и советы для п рактического програ м м и рования: 1.

При записи условий испол ьзуй формы, которые

лучше всего подходят для выражения см ысла.

Например, предикат NОТ больше подХодит для логической п роверки, чем NULL. хотя результат будет одинаков. В свою очередь NULL больше " подходи.- для п роверки на пустой список. Проверка на непустой с писок естественнее осуществлять предикатом (NОТ ( NULL х)), чем п реди катом (CONSP х) или х. ( Хороши й транс­ лятор будет трансл и ровать эти формы в оди наково эффекти в н ы й маш и н н ы й язык. ) 2. Избегай использования п севдофун кций SETQ внутри о пределений функций. Луч ше испол ьзуй фор м ы LET и DO, с которыми связаны механизмы определен ия, доступ ности и изменения значений

2.7

Достоинства и

качество п рограммирования

135

переменн ых. Переменвые получают значения всегда в одн о м и том же месте и после испол ьзования

3. 4.

5.

связи автоматически об рываютс я . Если испол ьзу­ ешь SETQ, то п роком ментируй его побоч н ы й эффект. Избегай использования разрушающих фун кци й (RPLACA, NCONC и другие), если ситуация не я вля етс я критической в отношении в ре м ен и ил и памяти. Н е используй п редикаты AND и OR в м ес то услов­ ных выражений. Предпочитай формы LET и DО формам LET• и DO.,

в связи с которы м и нужно учитывать побочный эффект. 6. Не используй п редложение PROG, есл и можно использовать более наглядную форму, например DO. 7. Не используй переменвые DO в качестве констан­ ты, а з адава й их внешней фо р мо й LET.

Следующие обстоятел ьства полезно запомнить для обл е г чен и я поиска и исправления ошибок, а также для обле гчения в нес ен и я изменений, возникающих в процессе сопровождения: 1.

Ис польз уй короткие функции и создавай определе­ ния, не завися щие от окружения момента вызова. Таки м об разо м их можно до включения в систему отдельно проверять вручную и н а маши не, а также ,

без усили й испол ьзовать их в составе различных систем. 2. В определениях обращай внимание и на "невозможн ые" случаи и поясняй ошибки в ком ментариях. Например, специально проверя й в предложении COND все воз­ можные ситуации и в качестве условия последней ветви используй п реди кат Т, а в качестве ее результата - сообщение об ошибке. 3. А ргументы функции задавай в логической последо­ вательности. Есл и у нескольких функций оди н и

г

2

136

4. 5

Методы проrра м м и рован ия

тот же аргумент, то пусть он будет первым или последни м аргументом. Есл и оди наковых аргумен­ тов больше, то задавай их всегда в одном и том же п орядке. Если у действия фун кци и или у ее аргументов п редполагается наличие некоторых с войств, то о п и ш и их я вно в ком ментарии. Ком ментируй п рограм м у разумно и аккуратно. Испол ьзуй комментарии как внутри оп ределени й , т а к и с наружи так, чтобы с их помощью отразить всю структуру п роrрамм ноrо обеспечения. С пеци­ ально ф и кс и руй вни мание на исключениях и слож­ н ы х местах.

Стил ю п рограм м и рован и я лучше всего учиться п рог­ рам м и руя. 1.

Л и т г ра т ура Brooks R. How t o Hack Lisp Real Good. Lect ure Notes, Stanford U n i vers i t y, Computer Sci ence Depart ment, 1984. 2 . Ершов А. П. О человечес ком и эстетическом факторах в п рограм м и рован ии. Кибернети­ к а. No. 5, 1 972. Knu t h D. The Art of Compиter Programming. Vol. 1 . , Fиnda mental Algorithms. Addi son-Wesley, Read i ng, Massachuset ts, 1968. [Имеется перевод: Кнут Д Ис кусство п роrрам м и рования. Т. 1 . Ос­ новные ал горитм ы. - М. : Мир, 1976 . ]

� 3.

3.

СРЕДСТВА И СРЕДА П�rР��ВАНИI

3. 1 ПЕРВИЧНАЯ СРЕДА КОММОИ ЛИСПА 3 . 2 СРЕДА ИНТЕРJIИСПА 3 . 3 СРЕДА З ЕТАЛИСПА

В этой главе мы познакомимся с лисповской средой

программирования. Коммон Лисп определяет для среды программирования лишь граничные условия, давая возможность принимать в реализации среды различные решения. Более детальные вопросы было решено оставить открытыми, поскольку среды прог­ раммирования вместе с их характеристиками и средствами ·находятся еще в стадии иJ/I!I'енсивного исследованШl. Далее .tt ьt изложим определенные в Коммон Лиспе для среды граничные условия и основны е компонен­ ты. После этого в качестве примера мы рассмотри.м лисповские среды программирования систем И нтер­ лисп и Зеталисп. И нтерлисп представляет собой классический пример интегрированной среды, которая первоначально разрабатывалась для системы разделе­ ния времени вычислительных машин DEC- 1 0/20 и которая после этого в документированном виде используется на Лисп-машинах фирмы Xerox. Зета­ лисп происходит из системы Маклисп, разработанной в М /Т для той же машины DEC-10/20. Систе.ма получила существенное развитие, и она используется на Лисп-.tt а шинах подобных Маклиспу ( LM/, Sym­ bolics, Т/ , Sperry, нынешний Uпisys и другие систе­ .Асы ) .

138

3 С редства и среда п рог рамми рован и я

Обстоятельства .меняются, прин ц ипы н ет .

О. Бальзак

3. 1 ПЕРВИЧНАЯ СРЕДА КОММОИ ЛИСПА • • • •

• • • • •

Апп арат ная среда реаJJизациА языка Состав н ы е ч асти среды проrраммирования на Лиспе И н те гриров а н н ость и про з рачность Редактирова ние проrрамм: ED Тестироа а ние проrрамм: TRACE и STEP П реры в а н ие вы чисJJ ен иА: BREAK и ERROR Тра нсJJяция проrрамм: COMPILE Си стема доку ментирова н ия и справочная система Комментарии Средства опредеJJен ия коJJичественных характе­ ристик вы чисJJениА

Апп аратн а я среда реаJJизациА языка Лисп-системы доступны для достаточно различных аппаратных средств, начиная с 8 битовых микро-ЭВМ и кончая суперЭВМ и специализированными Лисп­ машинами. Раньше разработку програм м на Лиспе осуществляли с помощью систем разделения времени на больших маши нах, особенно на � t 1. машинах серии DEC-10/20. В настоящее время акцент смещается на переопальные рабочие станции и Лисп-машины, которые � не без основан ия можно считать специализи­ рованными выч ислительными машинами, учитывая свойства языка Лисп и требова­ ния, п редъявляемые исследованиями в области прог­ раммирования задач искусствен ного интеллекта. В Ком мои Лиспе п ытаются отделить влияние аппаратного окружения от самого языка Лисп. Исходя из этого окружения определяются лишь стандартные и мена устройств, логические механ измы работы с

�У 1�'

3. 1 Пе р вичная с реда Коммои Лиспа

139

файлами и внешними устройствами. Таким образом, п редпринята попытка обеспечить как возможность развития аппаратных средств, так и переносимость арограм м, написанных на Коммои Лиспе из одной среды в другую. Составные части среды програ мм ирования на Лиспе Кроме внешних устройств с Лисп-системой связан набор системных програм м, таких как операционная система и специальные вспомогательные средства для п рограммирования, которые в большей или в меньшей степени использованы в подсистемах языка. Рассмот­ рим далее наиболее важные из них в порJiдке их ис­ пользования 11а этапах разработки программ:

Этап определения. Программ ы (определения DEFUN, присваивания SETQ и прочие) сначала записываются в файл обычно с помощью исполь­ зуемого на вычислительной машине редактора ( edi­ tor). Это происходит таким же образом, как и в традиционных язы ках. Вообще-то редактор можно вызвать непосредственно из и нтерпретатора Лиспа, в этом случае из интерпретатора можно перейти в редактор и обратно без промежуточного использования операцион­ ной системы. С точки зрения работы редактора Лисп-системы бывают двух основных типов: ( 1 ) работающие в памяти или резидентные ( res i dent) и (2) работаю­ щие с файлом или эагружаем.ые ( l oadaЬle). В первом случае функции можно тестировать сразу после их определения. Во втором случае функцию (или функции) нужно сначала загрузить в память с nомощью специальной директивы (LOAD). Загрузка может производиться и автоматически, когда из редактора переходят в интерпретатор (Маклисп). 2. Этап тестирования. Если определения были синтак­ сически верны и сообщения об ошибке не последо­ вало, то можно начать тестирование их работы. 1.

140

3 С редства и среда п ро гра мм и рова н ия

Поиск ошибок выч исления можно проводить с помощью трассировщика ( t race), который выводит имя и значения аргументов отслеживаемой функ­ ции каждый раз, когда она вызывается. Другой возможностью является использование пошагавого исполнения (steppi ng), когда выч исления выполня­ ются шаг за шагом под наблюдением пол ьзователя. Найденные таким образом ошибки можно затем исправить редакторомлибо непосредственно в памяти или в файле в зависимости от типа систе­ мы. Некоторые Лисп-системы nозволяют исправлять ошибки· во время вы nол н е н и я програм мы. Когда п рограiWма п реры вается на ош ибке или пол ьзова­ тель сам преры вает ее, уп равлеюtе передается функциям прерывания (brea k). В состоя н и и преры­ вания можно изучать и изменять значения перемен­ ных или вызы вать редактор для исправления (debug) определений функций, после чего вычисления можно продолжить, не производя их заново. Таким образом экономится машин­ ное время, и уже сделанные вычисления не п ропадут. 3 . Трансляция. Есл и программа нап исана и оттестиро­ вана, то ее можно отдать на трансляцию транслято­ ру (compi ler) Лиспа. Транслятор создает вариант функций или програм мы на маш инном языке, которы й обычно требует мен ьше памяти и работает значительно быстрее, чем интерп ретируемая версия. Разница, как правило, составляет оди н порядок, но зависит, естественно, от транслируе­ мой п рограм мы и от качества транслятора. Эффек­ тивно трансл ируются макросы, а также некоторые специальные виды рекурсии, например концевая рекурсия ( ta i l recursi on). В Коммои Лиспе трансляция более важна, чем это имеет место обыч но, поскол ьку есть возможность оптими­ зировать сильно абстраги рован ные формы. В добавок к основным действиям в расш иренных системах используются различные более развитые

3 . 1 Пе р вичная с реда l(оммон Лис па

141

вспомогательные средства и инструменты, облегчаю­ щие программирование. Например: 1. 2.

Активно помогающий п рограмм и ровать и дающи й справки ассистент (programmer' s ass i s t a n t ) или подмастерье (appren t i ce). Автоматический корректор ошибок ( Do What 1 Mean not what 1 t ype), который в состоя ние испр ч влять простые опечатки и синтаксические ош ибки >. 3. Протокол диалога, или так назы ваемая история ( h i story l i st ) , посредством которой можно сослаться на более ран ние реплики как пользователя, так и системы, отменить ил и вновь вы пол нить предш�твующие действия и т. п. Инспектор ( i nspec tor), который позволяет исследо­ вать сложные объекты в наглядном виде. Анализаторы програм мы и файлов, которые могут исследовать взаи моотношения оп ределен ий функ­ ций и их вызовов и генери ровать документацию. Интеракти вные справочные системы (on- l i ne docu­ mentat i on).

-

4.

5.

6.



Ин т е г риро в аннос т ь и п розрач н о с ть Среда програм мирован ия образуется из набора разл ич­ ных вспомогательных средств програм мирован ия и управлен ия дан ными. Различные средства часто объеди нены в интегрированную ( i nt egra ted) рабочую среду, которую трудно отл ичить от операционной систем ы. Под интегриро­ ванностью среды понимается то, что вспо­ могательные средства системы можно вызывать друг из друга, не обращаясь в промежутке к операционной системе. Операционная система обычно пол ьзовател ю не видна и подсистемы

4"I Ir-.JO

t) Подсистема Делаii то, что я имею в виду" или DWIM Инте рлис­ па представляет пользователю весьма тонкую помощь, угадывая верное положение скобок в фо р мах и многое другое, а не только аа:правление опечаток. -Прим. ред. •

3 С редства и среда nроrраммирования

142

дру г дпя друга прqзрач ны ( t ransparent ). Если, напри­ мер, выполнение п рограмм ы п рервалось на ошибке, то интерпретатор Лиспа автоматически переходит на обработку ошибки и функции п рерыван ия. Оrсюда можно снова вызвать интерпретатор Лиспа, например, для вычисления значений или определения переменных и функций в окружении, где возникла ошибка, после чего можно запустить редактор для нспраВJiения ошибки и п родолжить выполнение испраВJiенной программы с места ее прерыван ия. Часто работу среды невозможно отличить от самого языка Лисп. С точки зрен ия пользователя, услуги, п редпагаем.ые языком и системой, так же как и опреде­ лен ные им самим функции, являются частям и единой с реды. Например, в некоторых Лисп-машинах п рактич­ ески все окружен ие Лиспа реализовано на нем самом, и с истема в общей сложности испол ьзует тысячи раЗJiичных функци й и действий. Хотя Коммои Лисп и не определяет свою програм­ м ную с реду, однако он содержит некоторые входящие в состав среды фун кции и форм ы вызова подсистем. Далее м ы познаком имся с наиболее важны м и из них. Р еАакт и р ова н ие п ро rрамм: ED Для редактора (ed i t or) в Коммои Лиспе оп ределена лишь форма его вызова: (ED &OPTIONAL объект)

Объект в вызове можно задать с помощью необязатель­ ного параметра, и он может быть, например, перемен­ ной, функцией, структурой или файлом. Вызов ED без параметра возвращает в состояние, в � котором была прекращена предыдущая редак­ ция. В Лисп-системах используются разнообЛ разные редакторы. Лисповские функции н программ ы естественно можно в любой момент редак­ тировать с помощью обычного текстового редактора, который имеется в ЭВМ. Однако из-за наличия у объектов внутреннего строения предпочтительнее

'А1

3. 1 Пе р вичн а я ср еда Ком мои Лиспа

143

использовать так называемые структурные редакторы (st ruct ure edi tor), которые знают синтаксис языка. Структурные редакторы также различны. Редактор может позволять свободное передвижение по экран у или это передвижение может быть с вязано с логичес­ кой структурой списка. В обоих случаях редактор может автоматически позаботиться о соответствии скобок н о том, чтобы отступ логически соответствовал синтаксису языка. Интеллигентные структурные редакторы могут содержать и некоторые другие удоб­ ные автоматические действия. Тес т и ров ание проrрамм: TRACE и SТЕР Для тестирования програм м в систему обы � но входит функция TRACE (или подобная ей). С помощью трасси­ ровки ( t race) можно отследить выч ислен ие тестируемой функции (или функций) с цел ью локализаци и и исп рав­ ления (debug) ошибок. Если пекоторая функция помеч е­ на как трассируемая, то система инфор м ирует об имени функции и значениях аргументов каждый раз при входе в фу н к ци ю и соответ­ ственно выводит значение функции, как только оно вычислено. Трассировка включает­ ся с помощью следующего вызова: (TRACE &RESТ функции)

Например: _( trace + ) ( +)

аргум енты н е вычис пяют с я трасси руемые функции

После этого интерпретатор трассирует вычисление функции +: _( + ( + 1 2) 3 ) +: arg1 = ( + 1 2 ) arg2 = З

и м я функци и

арг ум ент ы

144

З Средства и среда nро г р а ммирова иия

+: +

6

=

arg1 = 1 arg2 = 2 + = 3

6

впоженныА вызов значение впоженного вызова значение вне�него вызова

Тt"ассироnку можно отмен ить ди рективой UNTRACE:

[

< untrace member > (MEMBER>

Выч ислен• формы можно проследить и шаг за шагом (si ngle step) интеракти вно с помощью директивы STEP: (STEP форма)

Форма теперь будет вычисляться по одному nодвыра­ жен ию за один раз. При вычислении каждой подформы и нтерп ретатор напечатает вычисляемое выражение н остановится. В этом состоянии программ ист может в диалоге исследовать н измен ить состояние вычисле­ ний, перейти нз одного состояния в другое, запустить и нтерп ретатор Лиспа, редактор н другие средства, и нтегри рованные ( вкл юченные) в систему. Преры ван и е вычислений: BREAK и ERROR Наряду с формами TRACE и STEP важным элементом п рослеживания и идентифи кации ошибоч ных ситуаци й я вляется BREAK· (BREAK &OPTIONAL сообщение) BREAK

это форма, которую в процессе поиска ошиб­ ки можно поместить в кри гическую точку програм мы. Когда вычисление доходит до места вызова, выводится сообщение и вычисления под уп­ равлением подсистемы исправления ошибок приостанавли ваются. После этого прерванное состоя ние можно изучить, сделать необхо-

j

-

-----·

3. 1 Первичная средз Ко м м ои .Пиr.па

145

димые исправления и в заваси мости от ситуации продолжить вычисления, в случае чего уже сделан н ые вычисления не. теряются. Однако для выдачи и нформации о более серьезных ошибочных ситуациях (error signa l i ng) и для вызова ошибки нз самой программы вместо функции BREAK испол ьзуются функции ERROR и CERROR. Фор м а вызова ERROR выглядит так: (ERROR образец &REST аргу.м.енты) С точки зрения вывода фун кция работает аналогично функции FORMAT, однако выч исления nреры ваются. Например: _( defun reverse1 ( список ) ; ; переворачивание списка ( do ( ( остатки список ( re s t остатки ) ) ( результат ( l i s t ( car список) ) ( c ons ( f irst остатки ) результат ) ) ) ; ; условие окончания ( ( nul l остатки > результат ) ( i f < at om ост атки ) < error "Неверная списочная форма ... 5 в функции REVERSE 1 . " список) ) ) ) REVERSE1 < re verse 1 ' ( а Ь с ) )

rc в

А>

( re vers e 1 ' ( а Ь с) ) Неверная списочная форма ( А В С ) в функ­ ции REVERSE1 . break > ; приглаwение в сост оянии ; nрерывания •



Вызван ное фун кцией ERROR ошибочное состояние относится к серьезным ошибкам (fatal error), и из него нельзя после исправления продолжить вычисления. В Коммои Лиспе определена и функция CERROR (coпt i­ nuaЫe error). Используя ее, в п рерванном состоянии

146

З Средства и среда програ м м ирования

можно исправить ошибку и п родолжить вычисления, как это делается функцией BREAK. ТранСJJ я ция проrра мм : COMPILE Обычно програм м ы можно разрабатывать в интерпрети­ рующем режиме. В этом случае функции используются в виде своих символьных сп исочных вариантов, трасси ровка и исправление которых делается легче. Когда программ ы уже не содержат ош ибок, их можно оттранслировать. Транслятор - это писnовская функция, которую можно вызвать следующи ми формами: (COMPILE fn) (COMPILE-FILE файл)

; трансляция фун кции ; трансляция фa iina

Предупреждение: не во всех диалектах Лисnа трансли­ рованные и интерnретируемые nрограммы обязательно работают одинаково. Некоторые интерпретаторы пользуются динамическим вычислением, в то время как их транслятор может быть статическим ! В Коммои Лиспе этих пробпем нет. Сис тема докуме н т ирования и справочна я систе м а Многообразная среда Лисn-системы может иметь огромные размеры. Размер систем ного кода Лисп­ машины, например, исчисляется мегабайтами. Таким образом и количество необходимой документации оказывается большим, а ее исnользование трудным. Для решения этой проблемы покадо­ билась разработка специальных интегрирован­ ных систем документирования и справочных систем, с nомощью которых пользователь может легко nопучить из системы информацию no векотором у воnросу. Даже в стандарте Коммои Лисnа учтены требования документирования и возможности для разработки поддерживающих его систем. Во время определения п исповского объекта с ним можно связать текст (documentation stri ng), оnисы вающий его испопьзова-

5

3. 1 Первич ная среда Коммо и Л испа

147

ние и значение. Поясня ющий текст (документация) синтаксически располагается в месте определения и ограничивается с двух сторон двойными кавычкам и. например: _( defun вт орой < х > "Возвращает вт орой злемент списка " ( cadr х ) ) ВТО РОИ

В определении функции (DEFUN) текст следует за лямбда-списком и перед телом. Кроме формы DEFUN пояснения можно добавлять и в формы DEFVAR, DEFCONSTANT, DEFМACRO и DEFSTRUCТ. Докумен ­ тацию, связанную с сим волом, можно п рочитать с помощью специальной функции: (DOCUMENTATION си.мвол тип) Параметр ТИП указы вает, какую из связан­ ных с символом документаций нужно прочитать. У одного и того же символа могут быть разные описания как перемен­ ной (DEFVAR) так и функции ( DEFUN), которые можно прочесть, если задать тип VARIABLE и FUNCTION. _( documentat i on • второй • var i aЬ l e ) NI L

_( documentat i on • второй • runct i on) Возвр�ет второй элемент списка

Все известные системе описания, связан ные с сим во­ лом, можно програм мно прочитать с помощью формы: (DESCRIBE объект) Например:

148

3 Средства

н

с реда nрогра мм и рова ння

_( d e s c r i be ' вт орой ) I t i s t h e s y mbo l BTOPOR ; вид объект а Package : Us e r ; пространство имен символа

Va l ue : unb o und з начение символа i n t e гpre t e d ; тип функции Возвра�ает вт орой элемент списка пояснение

Func t i o n :

Встроенные функции и другие систем ные объекты описаны заранее: ( de s c r i b e ' s e c o nd ) i s t h e s ymb o l SECOND

It

Package : SYSTEM Va l ue : unbo und Funct i on : c o mp i l e d SECOND l i s t Th i s func t i o n r e t ur ns t he s e c o n d e l ement ot the l i s t

Наконец, упомянем еще весьма полезную в работе функцию ассоциати вного зап роса APROPOS:

��

(APROPOS строка)

·

возвращает все известные системе сим волы, в именах которых содержится строка знаков, являющаяся параметром. С ее помощью можно, например, восстановить имя функции, точ ное имя которой забылось. Напри мер, вызов:

APROPOS

,

_( apr o p o c " p r i " )

( PRI NC PRI NT PRI N1 TERPRI







)

выводит все известные системе символ ы, в имени которых содержится "ргi".

3 . 1 Первичная срЕ'да Ко м мои

Лиспа

1 49

Ко мм е н та р и и Кроме задаваем ы х при оп ределении пояснени й (docu­ mentat i on), которые обрабаты ваются системой, к программе можно свободно добавлять пояснения и инструкци и, или IСо.мментарии (comment ) , предназначен ные для пользователя, читаю­ щего програм му. В Ком мои Лиспе ком ментари й отделяется от остал ьного текста програм м ы точкой с запятой "; ". При испол ьзовании ком ментари­ ев в Ком мои Лиспе рекомендуется следую­ щая практика, которую поддержи вают редак­ торы, знающие структуру язы ка, и програм­ мы структурной печати: t.

Комментарий, следующи й за текстом п рограм м ы на той же строке, отделяется одн им сим волом "; ". 2. Ком ментарий, находя щийся внутри функции и зани мающи й отдельную строку, помечается двумя символами "; ; " и начинается с отступа, соответству­ ющего логическому уровню, к которому относится ком ментарий. 3. Ком ментарий, находя щийся вне определения функции, т. е. внешний по отношен ию к функции, помечается тремя сим волами "; ; ; " и зап исы вается, начиная с левого края. Приведем пример ком ментирования програм мы: ; ; ; Комплексная арифмет ика ( defun k p l us ( х у) ; ; сумма комплексных чисел х и у ( l ist ( + ( fiгst х> дейст вит ельная ( fiгst у) ) часть ( + ( s e c ond х > ( s e c ond у ) ) ) )

мнимая часть

150

3 Сре дства и с реда п р о г ра м ми рова ния

Средства определения кол ичественн ых характеристик в ы числений Обычно Лисп-систем ы содержат средства, испол ьзуя которые можно измерить затраченное на вычисление в р е мя и узнать, например, количество новых сп исочных ячеек, созданных за время в ыч и сле­ ния. Само создание в Лиспе списочных ячеек (CONS) требует времен и н , кроме того, добавляет работы мусорщику. В Коммои Л и с п е в ре мя , необходимое дл я вычисления формы, м о ж н о попучить с помощью фу н кц ии : (TIME форма) _( setq х ' ( 1 2 3 4 5 6 7 8 9 1 0 ) ) (1

2 3 4 5 6 7 8 9

10)

_( t i шe ( append х х х х х) ) CPU Time : 0 . 0 1 вес . , Real T i me : 0 . 07 sec .

(1 2 3

• • •

)

; значение

3.2 С реда Инте рл ис nа

151

Цел ое это больше. че.м су.м­ .ма частей . А р и стотел ь -

8. 2 СРЕДА ИIПЕРЛИСПА • • • • •

• •

• • •

• • • • •

Списочны А редактор - List Edi t or Ассистент программиста Programmer' s Assistaпt Структурная печать - Pret t ypri пt Прерыв ания - Break Package П рерывание выч ислен и й и трассировк а Ра бо та с фай л ами - Fi l e Package Трансл ят о р - C o m p i l er Анализа тор программы - Masterscope Спра воч ная система - Hel p System Исправление оши б ок - Do What 1 Меап Лисп с фразовой с труктур ой - Conversat ional Lisp О конная сис те ма - Window System Целостность системы - System lntegra t ion Би блиотек а программ - Lispusers Package Литература -

Система Интерлисп наряду с Зеталисп занимает ведущее место среди лисповс­ т'1 ких сред программ и рования. Многие Cl разработан н ые в связи с Интерлиспом идеи и методы нашли применевне в дру­ гих Лисп-системах и машинах и уже применяются или нач и нают применяться в более новых м и кроЭВМ, рабочих местах и средах программирования для более привычных языков. Интерлисп не был заранее спроектирован. а разви­ валея в течение дл ительного времени на основе потреб­ ностей. возникавших при различных исследован иях. Прежде всего в развитии систе м ы нужно �= Е- =i Е- =iii =11 1= отметить роль таких организаций. как МI Т. BBN и Xerox PARC. Интерл исп реа­ л изован на многих различных вычисли-

152

3

Средства и сре да п ро г ра мм и рова н ия

тельных машинах. Н аиболее популя рной реализацией была lnterl isp-10, котора� работала сначала под управлением операционной систем ы Tenex, а позже п од TOPS на машинах PDP-10 и DECsystem-20, а также l nterl isp-D на Лисп-маш инах серии 1100 фирм ы Xerox. Предлагаемая Интерл испом среда программирова­ н и я характеризуется как дружественная , готовая к помощи и совместным усилиям, терпи мая к ошибкам. Подсистемы системы образуют открытое целое. Такие подсистем ы, как редактор, легко можно расши рить и и спользовать, напри мер, в виде части векоторой прикладной системы. Нес мотря на свой состав и сложность, Интерлисп на практике оказался особен но надежн ы м , и о н основательно документирован. Харак­ теристики системы достаточно устоялись, и ее новые верс и и совместимы с более ран н и м и. Далее рассмотрим различные компоненты системы и оказываемые ими пол ьзовател ю услуrи и п роцедуры. С писочны й р едак т о р List Ed i t or Редактор Интерлиспа я вляется так назы ваем ы м струк­ турн ы м редактором, который знает синтаксис сп исоч­ ных структур и обрабаты вает непосредственно исправ­ ляем ы й объект, а не его коп и ю. Поэтому он может с одинаковым успехом работать как с дан ными, так и с п рограм мой, т. е. с функциями, не выходя при этом за п ределы Лисп-си стемы. Исправление вы ражен и й , явля ющихся дан н ы м и, определений функций , сп исков свойств и других объектов осуществляется с помощью вызова редактора с исправляем ы м объектом в качестве аргумента, передвижен ия в вы ражении на нужное подвы ражен ие и осуществле­ ния после этого необходимых п реобразо­ ваний. Передвижение к нужному месту п роисходит через ди рективы позициони­ рования. С их помощью можно передвинуться вперед и назад, а также спуститься на более н изкий или подняться на более высокий уровень внутри сп исочной структуры. Вы ражение можно найти -



3.2 Ср е да И н терл ис па

153

и по его форме или содержан и ю. Директи вы редакти ро­ вания можно задавать по оди ночке или по нескальку на одной строке, разделяя и х между собой п робеламн. Редактирование осуществляется во внутренней символ ьной форме сп исоч н ы х структур, что облегчает передви жение внутри списка, п реобразование в ыраже­ ний, добавление элементов, удаление и их исп равление без боязни, что скобки перепутаются. С п исоч н ы й редактор заботится о сбалансирован ности с кобок. В версиях Интерл испа, работающих в системе разделен ия времец и , редактор работает построчно, цо в Л исп-машинах в системе l n t erl i sp- D исnол ьзуются более развитые методы указан ия и выбора n р и казов, основы вающиеся на испол ьзова н и и м ы ш и и м е н ю. Внутри редактора рекурсивно ( н а новом уровне) может быть испол ьзована ( nest ed cal l ) вся с реда Интерл испа, например: и нтерп ретатор Лиспа, функции п реры ван ия и даже сам редактор. Так, цапри мер, можно эффект исправления п роверить непосредственно из редактора без необходимости вернуться ца п реды­ дущий уровень под уп равление и нтерп ретатора Лиспа. Поскольку редактируемые структуры данных находятся в nамяти и редакти рование осуществляется физически на самом определен и и , н и какие специал ьные этапы трансляции, загрузки или и м подобные перед тестиро­ ванием не нужны. Есл и в процессе тестирования встречается ош ибка и это при водит к п рерыванию, то можно вновь вызвать редактор с более низкого уровня, внести новые исп равления и продол жить в ы ч и сления с прерван ного места на более высоком уровне. Оп ределения сохраня ются в файле фун кцией MAKEFI LES. На основе поддержи ваемой системой истории MAKEFI LES зап раши вает пол ьзователя, какое выражен ие и в какой файл нужно зап исывать, и обновляет файл ы тол ько в измен и вшейся части. Поддержи вается информация о содержи мом разл и ч н ы х файлов и о рас положении ( l ayout) в н и х дан ных, редакти руя которые обыч н ы м образом, можно вл иять на содержи мое и расположение файлов.

154

3 Ср едства и сре да п р о гра м м и р ов а н и я

Ассистент програ м м и ста - Programmer' s Assistant Взаимодействие между п рограм мистом и системой осуществляется через ассистента програм миста (РА). Основная идея РА состоит в том , чтобы п рограммист чувствовал, что ведет диалог не столько с бесстрастно выполняющей приказы машиной , сколько с активны м помощником и п осредни ком всей системы, который пытается облегчить и сделать более эффективной работу пользователя. РА, например, запоминает репл ики диалога и дает возможность в последующем сослаться на них. Напри­ мер, с помощью директивы ?? можно вывести историю диалога ( h i story l i st). В соответствии с выведен н ы м сп иском программист может повторить ранее выполненный приказ или групп у приказов (REDO). Он также может отмен ить (UNDO) п роизведенный ими эф­ фект, будь то хоть загрузка целого файла в систему, т. е. сделать так, чтобы выполненное стало снова невыполненн ы м . Н а самом деле существуют две истории, одна - для ин'l'ерпретатора Лиспа и вторая - для диалога с редак­ тором (ed i tor). Если, например, та же самая последова­ тель ность директив редактирования необходима два ил и большее ч исло раз, то ее можно повторить с помо щью истории. Например:



•?? FROM F 1 5 . •F PUТD

; вывести историю, ; с пирект ивы F

1 7 . •з 1 8 . •< ХТR 2 > 1 9 . -о 20 . •< SV 2 3 ) •REDO FROM F

; повториm си пирективы 1 5 - 20

16 . •< t MOVD>

начинаи

ист ории

Последняя директива REDO в свою очередь заносится в историю в виде события под номером (21 ), и его можно теперь повторить п росто директивой REDO.

3. 2 Среда Интерлнспа

155

есть воз м ожность самому опреде­ лить АЛИНУ истории, в соответстви и с которой события более давние моrут быть забыты асс истентом. На события можно сослаться по абсол ютному ил и относител ьном у порядковому во мер у или, как ранее, по содержимому. директива F 1Х J'V'. вызы вает редактор, с помощью которого м ожно исправить событие из истории перед его новым выполнением. Поскольку у и нтерпретатора и у редактора свои собственные списки истори и , то исправл е н и я , оказав­ шиеся позже ош ибоч н ы м и , можно л егко отм ен ить. После окончания редактирован ия весь его резул ьтат сохраняется в виде одного события в с п ис ке и стори и и нтерпретатора. Это дает возмож ность отменить редакnию и позже в теч ение сеанса работы. Ассистент п рограмм иста ис пользует и другие данные в диалоге, п рограммах пол ьзователя н с истем­ н ы х ситуаnиях, которые он собирает и поддерживает. РА по-разному испол ьзует эти данны е и предоставляет и х др угим ко м п онентам с и стемы .

У пользователя



J

Структурная пе ча ть

-

Pret t ypri nt

В Интерлиспе используется структурная печать Pret· typri nt (РР), которая вы водит оп ределения функций и

другие сложные списоч н ые структуры в аккуратном и ясном виде с соответствующими отступами. Сп иски вы водятся лишь до определен ной Глуби н ы или длины таким образом, что более rл убокне структуры заменяются на знак &, а более АЛи и н ы е хвосты на " . . . ". Это пом огает охватить структуру сложн ы х списков и сосредоточить вни ма­ ние на существенном. Со структурной печатью связаны специ­ альные ш рифты и поддержи вающее их испол ьзование п рограмм вое обеспечение (Font Package). Их использование п редполагает нал и­ чие подходящего оборудован ия, обычно лазерного

1'

принтера.

3 С ре дст в а и с реда п р о г р а м м и ро в з н и я

t56

Пр е р ы ва н ия Brea k Package Система п реры вани й ( Break Package) начинает работать п р и возни кновени и ошибки или когда пользователь сам п реры вает вычисления. Состоян ие, в котором и рерваны выч ислен ия, теперь можно изучать, отсле­ дить в обратном порядке при ведшую к нему цепочку вызовов и п росмотреть их контекст. В ходе этой работы можно п росмотреть всю Лисп-систему, но на новом уровне. Можно, напри мер, снова присвоить значения перемепн ы м (SETQ) , оп редел ить новые функции или действия и внести другие изменения в контекст. Так же 1сак и вне п рерывания, можно вычислить произвольвое вы ражен ие. Воз­ можно, при этом возникнет новая ошибка, в этом случае управление будет передано на новый уровень п рерывания, предыдущее состояние остается в состоя н и и ожидан ия и сохраняется до тех пор, пока к нему не п роизойдет возврата. Так за время сеанса могут возни кнуть несколько наложенных уровней п рерывания. Во время п реры ван ия можно легко исправить и рерваин ое место в п рограм ме, поскольку интерпрета­ тор Лиспа и редактор и нтерпретируют и редактируют одну и ту же физическую структуру п рограммы. Обычно достаточно ввести в состоя н и и п рерывания директи ву EDIТ, после чего система вызывает редак­ тор, устанавл и вает текущую позицию на место, вызвав­ ш ее п рерывание и 'Ждет ди ректи в редактирования. С точки зрен ия выч ислений п реры вание выглядит как вызов функции. О но всегда возвращает некоторое значение, так назы ваемое значение п рерывания, после чего выч исление п родолжается с ирерваниого места так, как будто бы ирерваиная форма возвратила в качестве значен ия значение п рерывания. Е сли, напри­ мер, выч исление п рервалось на неопределенной пере­ менной, то можно из п реры ван ия пойти дальше, возвращая для перемен ной некоторое значение. -

d ·

-

3. 2 Среда И нте рл ис п а

157

Прерывание вычислений и трассировк а Система преры ваний позволяет устанавл ивать п реры ва­ ние по инициативе пол ьзователя и отслеживать ход вычислен ий. Для выбран ной функции � можно вкл юч ить п рерывание с помощью директи вы BREAK, тогда каждый раз при вызове фун кции выч ислен ие будет п реры­ ваться. Вкл ючение трасси ровки осуществ­ ляется директи вой TRACE. Во время трассировки аналогично Ком мо и Лиспу п р и входе в функцию всегда вы водятся и м я функции и значения аргументов, . а при вы ходе из нее - значен ие функции.

ж . �

��

Работа с фа йлам и Fi l e Package Интерлисп - это система резидентного ( resi den t ) типа или система с рабоч им состоя нием (workspace) так же, как, например, APL. В начале сеанса из файлов загру­ жаются необходи мые п рограм м ы , т. е. фун кци и , пере­ менные со значениями и т. п. , после чего все находится в рабочем состоя нии, вы ход из которого осуществляет­ ся л и ш ь при завершении сеанса. Все нужные для п рограммирован ия и нструменты и вспомогательные средства включен ы в систему так, что во время сеанса не нужно возвращаться к операционной системе. При загрузке фун кци й , переменн ы х и других объектов в систему, объекты становятся как бы частью Лисп-системы в этом сеансе и образуют переопал ьное расширение системы пользователя, которое может содержать даже новое оп ределение самой систем ы. В конце сеанса (или в п роизвол ь н ы й момент) новые функции можно сохранить в файлах или снять коп и ю целиком с состоя ния всей системы. Программ ист может не заботиться о форме записи или расположении функции в файле (хотя и это 0 возможно). Достаточно оп исать для каждой функции файл, в котором она сохраняется. Файловая система учиты вает, какие объекты хранятся в каждом файле, в каких файлах и в каком месте они находятся и когда их в послед-

=

158

3 Средства и среда п ро г ра м м иро в а н и я

н и й раз редактировали. Во многих ситуация х система в состоян и и добраться до отсутствующего объекта без явного вызова и позаботиться о том, чтобы сделанные изменения были сохранены. Н еобходи мые данные она получает от редактора и ассистента программ иста. Так програм мист во м ногом освобождается от файловой бухгалтерии, которая в больших при менен иях весьма быстро разрастается в трудную п роблему. Тра нслятор Compiler Система Интерл исп, как и л юбая мало- мал ьски хоро­ шая система, содержит транслятор. С его помощью можно трансли ровать как файл ы, так и отдел ьные функции из рабочего состояния системы. Р езультатом трансл я ци и можно непосредствен но воспол ьзоваться или сохранить в файле для дальнейшей загрузки. Транслятором можно транслировать функции частично, и в одной и той же програм ме могут одновременно быть как интерпретирован ные, так и трансл и рованные функции. Транслятор может вызы ваться более развиты­ ми функци я м и работы с файлами (например, МAKEFI­ LE) , который автоматически обновляет файл с исход­ н ы м текстом на Л испе и создает его транслированную верси ю. Испол ьзуются и функци и, непосредственно вызывающие транслятор (COMPI LE и другие). -

Анализатор программы - Masterscope Анал изатор п рограм м (Masterscope) уп рощает работу с бол ь ш и м и п рограммам и. С его помощью можно сделать наглядной структуру п рограмм, п рояснить взаи мные ссыл ки, кто кого вызы вает, где @ перемен ные получают значение, где они испол ьзуются и т. д. У анализа­ тора с оди наковым успехом можно запраши вать данные как о рабочем состоя нии, так и о п рограм мах, находя щихся в файлах. Из резуль­ татов анал иза составляется база дан ных. Есл и фун кци и изменя ются, то анализатор узнает об этом от редакто-

1. � L

3 .2 С ре да И нте рл и с п а

159

ра и управления файлами и необходимый новый анал из будет осуществлен по собствен кой и н и циативе. Справочная система Hel p System Справочное руководство п о Интерлиспу целиком содержится в базе дан н ых, из 8 которой с помощью с п равочн ой системы ( Help System) можно делать запросы. Зап ро­ сы можно делать четкими п овелительными О п редложен и я м и п ростой структуры. Например: -

1

! TELL

МЕ АВОUТ функция

! VHAT ARE ! TELL

МЕ

ТНЕ

ABOUT

ARGS FOR функция ТНЕ

LAST ARGUMENТ OF функ­

ция ! MORE ! OIC

В системе есть указатель в виде с писка к справочному руководству, с помощью которого она добирается до подходящих пояснений в базе дан ных. Исправление ошибок - Do What 1 Mean В результате проведеиных исследований, выяснилось, что большая часть ошибок в п рограммах - это п росто ошибки написания, такие как неверная буква или знак, изменение порядка двух знаков, ошибка в регистре, пропуск элемента, ошибка в скобках и т. д. Дл я автома­ тического исправления си нтаксических ош ибок такого типа в Интерлиспе существует ун икал ьная система DWIM (Do What 1 Mean ( not what 1 t ype) ) . При воз н и к­ новении ош ибки всегда автоматически запускается DWIM. И справление ошибок основывается н а данн ых, имеющихся о п рограм ме, на информации о предыду-

160

3 Средства и с реда про г р а м м иро ва н ия

щих действиях пользователя (списке истори и), а также самого состояния, в котором проявилась ош ибка. Н апример, вероятность ошибки в написан ии оцени­ вается путем вычисления для активных имен их относительных оценочных чи­ сел на основе длины имен и отличий в знаках. Простые и совершенно явные ошибки система DWIM исп равляет самостоятельно, оповещая л и ш ь о сделанных исп равле­ ния х и сразу же продолжая · вычислен ия. В более сомнительных ситуациях она обращается за подтверж­ дением к пользовател ю. Следующи й воп рос, напри мер, свидетельствует о том , что DWIM встретила в функци и ФАКТОРИАЛ неизвестную функци ю с и менем COOND и задает вопрос : COOND

,I N ФАКТОРИАll - > C.OND ?

J

На него можно ответить YES, и в этом случае DWIM исправит ош ибку, или NO, в этом случае выч исления п родолжаются без исправлен ия и возникает п рерыван ие. Есл и п рограм мист ничего не ,_ z z ответит, то DWIM нем ного подождет и про­ должит работу, п редполагая, что молчание ­ знак согласия. Есл и п рограммист хочет подумать над решением, то он может отве­ тить п робелом или переводом строки, в этом случае DWIM будет ждать окон чател ьного ответа YES или NO. DWIM в состоян и и исправить некоторые п ростые синтаксические ошибки, однако она, естественно, не в состоя н и и · исправить ош ибки, связан ные с логикой п рограм м ы. Интерлисп разработан с учетом требований исследо­ вателей и опытных пол ьзователей. Многие подсистемы содержат ш и рокий выбор директив и возможностей, существен но повы шающих п роизводител ьность труда, когда их испол ьзуют по назначен и ю. Кроме того, в с истеме и меются параметры, с помощью которых пользовател ь может для себя настроить систему.

3 2 С реда Инте рл исnа

161

Напри мер, для DWIM можно составить следую щее оп исание: пользовател ь опытн ы й или начинающий, быстро или медленно работает с клавиатурой и т. д. В соответствии с эти м описанием DWIM делает работу более удобной. Е сли вообще нежелател ьно вмешатель­ ство DWIM, то ее можно цел и ком откл юч ить. Л исп с фразовой ст р у к тур ой - Conversat i ona l Lisp Для п рограммистов, привыкших к языку с фразовой: структурой, наверняка будет п р и ятн ы м н ал и ч и е в Интерл испе расширения CLi sp, которое рас ш иряет синтаксис Л испа в нап равлен и и известны х фразовых языков. CLi sp дает возможность использовать I F р THEN q ELSE r, FOR е WН I LE р DO q и другие ти п и ч­ ные структуры управления, а также и нфиксную запись для арифметических, логических операций и операций сравнен ия. Формы системы CLisp реал изованы с помощью макросов, трансли рующих в ы ражения в соответствую­ щие им л исповские выражен ия. С истема охватывает разнообразное структурное распознавание G ( Pat tern Match), трансляцию и пакет работы с запися м и ( Record Package), который позволяет определять тип ы дан н ы х н а более в ысоком уровне с ориентацией н а их при менен ие. CLisp автоматически п реобразует п редложе­ ния в соответствующие л испавекие выражения. Предложения можно и реобразовать и специальной функцией DWIMI FY. Аналогич н ы м образом можно иреобразовать через CLi sp л исповские в ы ражения и програм мы с помощью функции CLISPI FY.

i

Ок о н ная система - Wi ndow System Интерлисп наряду со С молтол ком был первой с и сте­ мой, в которой начали испол ьзоваться основа н н ые н а битовой карте многооконные методы изображения (Tei telmaп 1977). Расположенные рядом, наложенные и накрывающие друг друга, с вободно перемещаемые окна создают гибкую и естественную рабочую среду, похожую на рабочий стол ( deck- to p metafora) с бумагаб З а к 547

162

3 С редства и с реда программирова ния

ми и

другим и инструментами, а также мя общен ия

ди н а м и чес к и й и н те рфе й с

между человеком и маш иной. Одно о кн о может быть зарезерв и ро­ вано мя ди ал о га между пользователем и с и с те м о й , второе - может отоб ра­

жать

исход н ы й

текст

тестируемой

п роrрам м ы , в третьем - м о жет п рос м а­ триваться трасса выполнения, ч ет ве р тое - может быть закреплено мя с п равочного руководства, п я тое может содержать по ч ту или д иал о г с д р у г и м пользова­ телем и т. д. Каждое о к н о соот ве тс тв ует с во е й задаче, является посредником в об м е не п р и частн ы м и к зада ч е данными и отоб ра ж ает течение событи й в нем.

Цел ости ость с и с темы - System lntegra t ion Р азл и ч ные подсистемы Интерл испа сложным образом связаны друг с д р у го м . Разн ые функции п р е дполагают , что доступ н ы сложные, автоматические и разумные услуги. С друго й стороны зто означает усложнение раз работк и системы и п ре дъ я вл яе т большие т ребо ван и я к. з в ан и ю пользователем систем ы и к ее и с п ол ьзо в а н и ю по назначению. Для т а ки х подсистем, как, нап ример, CL�sp, все в оз м ож ные директи вы точно не определены. Целью было - дать п рограммнету более широкие возм ожност и строить и экспери менти ровать с нужн ы м и конструкци­ я м и . П реи м ущес т ва та ко й страте ги и системы в то м , что программист может легко из ме н ять свои проrраммы, наблюдать на непосредственном э кс пер и мен те за ре зул ьта та ми их работы и при необходимости отменять не в ерн ые исправления. Библиотека nрог ра мм

С светемой

-

Lispusers Package

Натерлисп связана библиотека программ (Lispusers Package), охватывающая широкий

набор различиого прикладиого программкого обеспечения, а также включающаи в себs расширеиве и документацию к с истем но му програимиому обеспечению, в том 'l нсле

3.2 Среда Интерлиспа

163

п рогра м м ы и реобразован и я между И н те рл и с п о м и друг и м и диалектами язы ка. п ро гра м м ное обеспечение око н н о й с и стем ы , базы дан н ы х , сетевой интерфейс и другое. Многие из э ти х п рограм м уже в х о дят в состав боле е новой верс и и l n t e rl i s p- D, которая образует и нтегрирован н ую с реду п рограм м и ро ва н и я дл я Лисп­ маш и н Xerox с е р и и 1 1 00 ( Xerox 1 982). Так и м образом , Интерл и с п систе м ы разделения вреиени nослужил п ромежуточ н ы м э тап о м в переходе к Лисп-машинам Xerox сер и и 1 1 0 0 . Так же раз ви вал ас ь и с реда Зеталис п Лисп- маш и н Symbo l i cs, LMI и Tl , о п и раясь на Макл и с п систе м ы раздел е н и я в рем е н и .

Литерату р а 1 . Ba t es М. , Wagre i c h В. , Bobrow R. l n terl isp Pri mer. Bo l t Bera nek & Newman, Report No. 4353, 1980. 2. Ерр В. lnterlisp Programmierhandbuch. I nst i t ut

5.

f uer De u t sche Sprache, Mannhei m, 1977. 3. Goodw i n J. А Gui ded Tour of t he lnter­ l i sp System. U n i vers i t etet i Li nkopi ng, Raport R-77-2. Linkopi ng. 1977. 4 . Haral dsson А. I n t er l i s p - en avancerad i п t egrerad progra mmeri ngs-omgi vni ng for Lisp-spraket. Datalogi cen t r um, ТН Li nkop i ng, R-82-29 , 1982. Sandewal l Е. Progra mm i ng i n ап l n t e ract i ve Environmen t : The Lisp Experience. А СМ Compu­ ting Surueys Vol. 10, No. 1 , Мarch, 1 978. Seppanen J. lnterl i sp ohjel mo i n t i jarj est e l ma - ym­ paristo ja t yoval i nee t . ТКК. Laskentakesk us. 1984. Te i t el ma n W. Towa rd а Progra m m i ng Laborato.ry. Proceedings of the 1 st IICAI Conference, 1 9 6 9 . Tietel man W. А Display Ori ented Programmer' s Assistant. Proceedings of the 5th IICAJ Conferen­ ce, Vol . 2, 1 9 77 . Tei telman W. • Мas i nter L The lnterl isp Program­ m i ng Env i ronment. C omp u t e r, Vo1. 14, No. 4 , 1981 . lnterlisp-D Users Guide. Xerox E l ect ro-op t i cal Systems, Pasadena. Ca l i f ornia. 1982. lnterlisp Ref e r e nc e Manual. Xerox PARC, Palo Al t o, Ca l i forn i a , 1 978 и 1983. ,

6. 7.

8.

. 9. 10. 11.

3 С ре дст ва и с р е да про г ра м м и рова н и я

164

Все преуменьш ать - это ма­ ния вел и чия.

Э.

Ди ктуниус

3 . 3 СРЕДА ЗЕТАЛИСПА •

• •

• • • • • • • • • •

Объек тная система fl avor М а крос и терации Loop Интерфейс пол ь зователя Ок онная система Интегри рова нные средства ра з работки Экра н н ый редактор Zmacs Инспектор структур lnspec t o r О тладчик программ Debugger У пра вление фа йла м и И нспектор состоян ия Peek Zma il и ра б ота в сети Я зы ки и и нструменты Л итера тура

В качестве второго при мера более разви­ тых Л исп-с истем рассмотрим Зетал исп. ' О н основан на разработанной в МIТ � . }-системе Макл исп и н а редакторе EMACS. Однако с истема заметно расш и­ рена и обновлена. Зетал исп содержит, напри мер, следующие более развитые механизмы и черты: .

- ш и рокий выбор типов дан ных; - возможность объектно-ориенти рованного п рограммирования в системе Flavor; - современные управля ющие структуры, например инспирированн ы й подсистемой CLisp Интерлиспа м акрос LOOP, динамические механизмы передачи управления соп рограм м ы и п роцессы; - гибкий механизм кл ючевых слов в ля мбда-сп иске и м ногозн ачные фун кци и ;

3 . 3 Среда З е тал и с п а 165 �------------------------

------·------------

- ввод и вывод, основывающнйся н а потоках; - п ространства и мен; - уже готовые функции, в том ч исле для сортировки, работы с линей н ы м и уравне н и я м и и матр и ч н ы е выч исления. Объектная система fl avor По сравнени ю с Ком мои Л испом Зетал исп в качестве расш и рения содержит объектную с истему flavor, позволя ющуюосуществлять объектное п рограм м и рова­ ние. В систему входит набор готовых базовых флей во­ ров ( f l avor) , которые п рограм м ист может испол ьзовать по своему усмотрен и ю. Напри мер, о конная система основывается на объектах, с помощью которых п рог­ раммнет может, особен н о гибко комб и н и руя базовые возможности, создавать окна нового ти па. Макрос ите ра ц ии Loop Второе расширение по сравнению с Ком м о и Л испом составляет макрос итерации LOOP ( Loop Macro ) . обладающи й бол ь ш и м и возможностя м и . С � его помощью можно изобразить сложн ы е п о Р' структуре циклы на язы ке, напоми нающем естественный. Структурам и LOOP можно гибко комби н и ровать известн ые из языков Н с фразовой структурой цикл и ческие п редложения и другие полезные в разл и ч н ы х с итуациях форм ы циклов, такие к а к FOR, DO, WH I LE, REPEAT, UNTI L, WHEN. WIТH, APPEN D, COLLECТ, COUNT, SUM, I N IТIALLY и FI NALLY. Эти итераци и , как это видно и и з названия, реал изован ы в виде макросов. Зеталисп испол ьзуется на Л исп-маши нах LMI , Symbo l i cs и Tl и содержит в общей совокуп ности более 10 000 функций или всего более 20 мегабайтов кода. На ряду с языком Лисп среда Зетал исп содержит разносторо нн и й интерфейс пол ьзователя и цел ы й набор и нтегрированных рабоч и х и н струментов и других вспомогательных средств (fac i l i ty). Системное програм-

166

3 С редства и среда nроrраммировання

м ное обеспечение целиком нап и са н о на Лиспе, и оно поддерживается на исходном языке. Остановимся далее кратко на наиболее важных подсистемах Зеталиспа.

И нте р фе й с пол ьзователя Интерфейс пользователя системы Зетал и с п состоит из внешних устройств и програимного обес печения, котор ы е обес печ и вают пользователю простой доступ

ко всем средствам систем ы. В качестве (:) N U ус т ройст ва отобр а жени я используется '.J \. диспл е й с битовой картой (Ьi tmap) и черно-белым экраном, обычно содержащим растр 1 100 на 800 то чек . Возможно использование в цветного д и сплея. Для звукового вывода в систему входит DА-м одем , усилитель и динамик. Работу с экраном поддерживает оконная система, которая дает возможность н абл юдать и управлять одновременно несколькими различными З&Аач ам Р ипв дей с твия ми , связанными с од н ой задачей. � В качестве уст ро йс тва ввода кроме клавиа­ � ту ры используется мышь (mouse), с помощью которой можно " по каз ы вать,. на устройстве о тображен и я . . Перемещение мыши по горнзонтапьной п ов ерхнос т и приводит в дв и же н ие указатель на экране дисплея. С помощью кнопки (but ton) н а мыши м о ж но делать выбор (cl ick) в окнах, переходить из одно го окна в другое, от к р ы ват ь и за к р ы вать окна, изменять н переносить их, а также запускать де й с т в и я . Мышь - важное усtройство взаимодействия. Наряду с эти м директиву мо жно выдавать и путем ввода командного слова или связан­ ного с ним слова с клавиатуры. П рограм м н ое обес печ е н ие и нтерфей са можно е п о м о щью параметров и новых определени й подстроитъ

1' J

под нужды пользователя.

Оконнаа система

Экран разбивается на о кна, которые могут испопьз� ваться одно в ремен н о . Окна можно свободно формнро-

3.3 Среда Зеталисnа

167

вать и перемещать, и они могут перекрывать друг друга и находиться рядом так же, как л исты бумаги на столе. Скрытое окно можно вытащить на самый верх нажатием кнопки. Окно можно разбить на более мелкие окна, которые называются форточiСа.м.и ( рапе), и т. д. Для отображения кратковременных дан н �f могут использоваться так называемые pop-up меню .

И нте гр и р ованные ср едства р а з ра ботки Ядром средств разработки (developmeпt tools) среды Зеталиспа являются оконный интерпретатор Лиспа (Lisp Listener) и (частичный) транслятор. Он взаимо­ действует с большим количеством более развитых средств программирования, таких как: - оконный интерфейс пользователя (Wi пdow System); - текстовый редактор (Zmacs); - программа исследования структур данных ( l пspector); - отладчик программ (Display Debugger); - п рограмма исследования состоя ния системы ( Peek); - редактор системы файлов (File System Edi t or); - редактор шрифтов (Foпt Edi t or) и форматтер текстов (Formatter); - система электронной почты (Zmai 1). Кроме Лиспа в системе доступно множество других языков (Фортран, Паскаль, Ада, Си, Пролог и другие) и другое базовое п рограм­ мное обеспечение, такое как преобразователь для работы с Интерлиспом ( l пterl i sp Com­ pat i bi l i t y Package) и рабочий и нструментарий более высокого уровня (например, Explorer Toolki ts). Различные подсистемы взаимодействуют друг с другом. Так, например, выполнение п рограмм из редактора, исправление и трансляция в момент испол­ нения возможны таким же образом, как и в Интерлис­ пе. Программу можно тестировать, даже если не все ее части готовы. Программы можно выпол нять по мере t) Меи10, кото рые раскрывакm:я по команде обращения к ним, как nравило, с nомощь10 мыши. -При.11 . ред.

168

З Средства и с реда n рогра м м ирова н и я

того, как о н и о пределя ются . Динам ическая загрузка позволяет изменять функци и во время счета. Не подверrшиеся изменени ю части п рограм м ы не нужно снова трансли ровать или загружать. Экра н н ы й реда ктор Zmacs Экран н ы й редактор Zmacs основы вается на разработан­ ном в с вязи с Макл испом текстовом редакторе Emacs, знающем с и н таксис Л испа и некоторых языков п рог­ рам м и рования и п римени мом для обыкновенной текстовой обработки. Zmacs, как и Emacs, содержит сотн и возможностей, которые не встречаются в других редакторах. Новичок, конеч но, может обойтись и меньш и м подм ножеством Zmacs. Редактор содержит возможности для определения характеристик пол ьзова­ теля ( user prof i le), так можно задать новые команды, с войства и режи м ы редакти рования ( mode). Команды Zmacs задаются как с клавиатуры , так и с помощью мыши. Zmacs это так называемый структур­ н ы й редактор. Это означает, что он по-разно­ м у работает в различных ситуациях или режимах ( mode). Напри мер, в л исповском режиме он обрабаты вает текст в соответст� ви н с си нтаксисом Л испа, в резул ьтате чего логическое перемещение в п рограмме п роще и быстрее. Zmacs п оддержи вает Лисп, напри мер, с помощью следующих свойств: -

Реакция м и ганием на откры вающую скобку, соот­ ветствующую закры вающей скобке. Возможность ссылаться на вы ражен и я и работать с ними как с един ы м цел ы м , при этом скобки остаются сбаланси­ рованн ы м и. 2. Осуществление отступа, соответствующего логичес­ кой структуре кода ( pret typri n t ) . 3. Умение искать в рабочем п ространстве редактируе­ м ы й объект по имени ( как фун кцию, переменную, макрос или объект). 4. Способность находить вызы вающие функции и методы объектов. 1.

3 . 3 С р еда Зе та л испа

169

Редактор Zmacs признает около 400 команд, и поэтому содержит документацию в операти вном режиме. С редактором тесно связаны программа форматирования (Text Format ter) и редактор ш рифтов ( Font Edi tor). Используя редактор ш рифтов, можно с точностью до элементов растра ( p i xel ) оп ределить новые типы и размеры букв, специальные символы и изображения ( i con) или изменить выбор п редлагаемых системой готовых типов. Инспектор структур lnspector С помощью инспектора структур можно исследовать и вносить изменения в сложные л испавекие объекты. Инспектор наглядно отображает части объекта, при этом способ отображения зависит от типа О объекта. Нап ри мер, частя м и списка я вля ются его элементы, частя ми символа - связанное с ним значен ие, оп ределение функции или спи­ сок свойств и т. д. В окне и нспектора испол ьзу­ ется много форточек, в которых можно исследовать различные объекты , показы вать меню, вычислять выражения, ссылаться на п редшествующие команды и т. д. Отладчик програ мм Debugger Отладчик программ (Display Debugger) Зеталиспа запускается при возни кновени и ош ибки. О н , как и интерпретатор структур, управляется посредством окна со м ноги ми форточ кам и. В форточках содержатся, на­ пример, данные о предшествовавших оши­ бочной ситуации этапах выч исления и о связях каж­ дого окружения, выбор команд, а также открываются окна для интерпретатора Лиспа и инспектора структур, используемого для исследования и тестирования ошибочных структур.



170

3 С редства и среда п роrраммирования

Уn р а впени е ф айла ми

Н а уровне каталога для работы с файла м и и управле­ ния ими существует специа.nьиый оконный редактор. С его помощью можно, напри мер, удалять и создавать фай.nы и каталоги, давать и м и мена, распечатывать на принтере, делать копию на магнитной ленте, а также исследовать и устававпивать характеристи ки катало­ гов.

И нс пектор состо я н и я Peek Зетал исп содержит также специальный и нспектор ( Peek) , с помощью которого можно исследовать и

модифицировать раЗJi ичные части системы и их дейст­ вие, например: процессы, различные ста ти ст и ч еские счетчики, окна, виртуальную память и локал ьную сеть. Zma il

и

работа в сети

Лисп-машины сп роект ир о в а н ы как индивидуал ьные рабо ч и е места, но их можно объединять в локальную

сеть (local area network). Таким образом, становится возможным общение между р або ч и м и места­ ми, а также совместное испол ьзование фай­ лов, программ и внеш них устройств ( напри­ мер, лазерн ы й принтер, дисковод). Работа в сети объединяет преимущества двух подходов : разделения времени и и ндивидуал ьных рабочих мест. В локальной сети. обычно есть машины ( на п р имер , для хран ения файлов), и, кроме этого, в ней могут быть шлюзы (gateway) в другие локальные и л и общие сети

дан н ых.

Языки

и

ин струм ен ты

Выбор используемых в среде Зеталиспа и нструментов и яз ы ков программирования зависит от поставщика, п р и ч ем предлагаемый набор '-Редств все время расши­

ряется. Среди других языков предлагаются Фортран, Паскаль, Ада и Пролог. Для этих языков в среде Зеталиспа существуют особенно развитые програм мные

3.3 Среда Зеталиспа

171

окружения, и разработанные в н и х программы можно выполнять вместе с п рограм мами на Лиспе. Готовые инструменты и п рикладв ые • разработки в большом количестве имеются для работы с э кс п ерт н ы м и системами, с естественным языком и речью, с реляцион­ ными базами данных, м а ши н но й графики и машинного проектирования.

т'�18Т

Л ите ратура Hyvonen � Seppaпen J. , Syrjanen М. SТеР-84 Tutorial and Jndustrial Papers. Suomen Tekoaly­ tut ki muksen Paivat, Tietojenkasi t telyt ieteen seu­ ran julkaisu 4, Otaniemi, 1984. 2. Stal l man R. М. Em a cs The Extensi Ьie, Custom i zaЫe, Sel f-Document i ng Display Edi tor. Memo No. 5 1 9 , Al LaЬoratory, MIT, Cambridge, Мassachuset ts, 1979. -..not 3. Explorer Technical S u mma ry. SymЬol ics lnc. , Cambridge, Мassachusetts, 1981. 4. Oue rview of LМI Usp Machine Software. Lisp Мachine Inc. , Culver Ci ty, Cal i fornia, 1982. 5. SymЬo lics 3600 Technical Summary. SymЬolics lnc. , Cambridge, Мassachuset ts, 1983. 6. Wei nreb D. , Moon D. A. Usp Machine Manual. SymЬol ics I пс. , Cambridge, Мassachusetts, 198 1 . 1.

.•

6

-

4 ПРИМЕРЫ ПРОГРАММ 4 . 1 ЛИСП НА ЛИСП Е 4. 2 МИКСИМА 4. 3 ЯЗЫК СПЛЕТН И КА 4. 4 ДАРВИН 4.5 СОЛНЕЧНАЯ СИ СТЕМА

Для того чтобы дать представление о структурах, .механиз.мах, принципах Лиспа и технике програ.м.ми­ рования на не.м, в главах книги, посвященных програ.м.мированию на Лиспе, был представлен и запрогра.м.мирован целый набор различных небольших програм.м. Теперь .мы познако.ми.мся с образца.ми несколько более основательного програ.м.мирования. В приводим ых при.мерах обычно используются доста­ точно простые лисповские функции, из совокупного поведения которых и с учето.м их взаимодействия возникают большие програ.м.мы и систе.мы. При.меры подбирались так, чтобы дать представле­ ние о различных областях при.менения и стилях програ.м.мирования на Лиспе. Их нельзя рассматри­ вать как при.меры практических систе.м, они только показывают, какие приемы и решения .можно приме­ нять, создавая в ра.мках технологии работы со знанtt­ я.ми языки представления данных и способы решения пробле.м более высокого уровня. Прежде всего в качестве примера использования Лиспа в систе.мно.м програм.мировании напише.м програ.м.му простого интерпретатора Л и с па с по.мощью са.мого Лиспа. Вторы.м при.меро.м будет небольшая алгебраичес­ кая систе.ма, Микси.ма, которая у.меет анализировать и выполнять простейшие символьные действия, такие как н ахождение производной, упрощение выражений и их вычисление. Третий пример - из гуманитарной области, из об.ласти соприкосновения языкознания и фольклора. Он связан с относи м ы.ми в настоящее вре.мя к детской культуре игровы.ми и тайны.ми языка.ми, которых только в финско.м языке насчитывается около тридца-

4 Приме р ы п рог рам м

173

ти. Запрогра.м.мируем здесь один из них - язык сп.летника и его расширение - цыганский :жаргон. В с.ледующе.м при.мере рассматриваются э ксперт­ ные системы и продукционное програ.ммирование. Построия небо.льшую базу знаний. содержащую сведения о :животных. и запрограммируем д.ля нее машину принятия решений, решающую задачу простой к.лассификации :животных по их признакам. Пdс.ледний при.мер знакомит с объектны.м програм­ яированием. испо.льзуемыя в моде.ли движения п.ланет и спутников Со.лнечной системы. Каждый пример завершается списком .литературы. предназначенным для более детального ознаком.ления с предметом.

� -

-

-

-

4 П р имеры п ро г ра м м

174

о

Один пример лучше, чем ты­ сяча доказательств . У. Гладстон

4. 1 ЛИСП НА ЛИСПЕ • • • • • • • • •

Инте рпр ета тор Л испа на · Лиспе Пр и м ити в ы интерпретатора Униве рсальна я ф унк ция EVAL1 Ос н ов н а я часть интерпретатора: APPLYt П р и м е р ы вычи слений Печа ть результатов - структурна я печа ть Про г рам м и рование диалога Про г ра м м ирован ие ввода и вывода Литерат у ра

Интерпретатор Лиспа сравнител ьно легко запрограм м и­ ровать на самом Лиспе. Но определение какого- н ибудь языка на нем самом - это не такая уж очевидная задача. Хоро ш и м пояснением к этому будет история зарождения подобной идеи (Stoyaп 1984 ). Интерпретатор Лиспа на Лиспе Маккарти рассказывает, что во время его разм ы шлени й о семантике лисповской фун кци и EVAL С . Рассел предложил запрограмми ровать ее тем же способом, что и другие функции Лиспа:

" . . . Этот EVAL был написан и опубликован в нашей статье, когда Стив Рассел сказал: "Послушай­ те, почему мне не запрограммировать этот EVAL и вы получите интерпретатор", на что я сказал ему: "Ну, ну, вы путаете теорию с практикой, наш EVAL пред­ назначен для чтения, а не для вычислений . " Но он н а этом не остановился и сделал интерпретатор. Таким образом, С. Рассел оттранслировал EVAL из моей статьи в .машинный код 704, отладил его и объявил

4.1 Лисп на Лиспе

175

резул ьтат в к.аче стве ин терпретатора Л и с п а, че м он, к он еч но, и являлся, . . . " После того как идея была подана, ее осуществление не вызвало уже особых затруднений , так как в Лиспе данные и програм м ы представляются одина­ ково. Используемые при этом основ­ ные средства - это блокировка вычис­ лений, при помощи которой можно при необходимости запретить вычис­ ления; базовые функции; условные операторы и механизмы рекурсии и определения функции. Расс м отри м ниже простой и нтерпретатор Лиспа, запрограммирован ный на нем само м . Он в пекоторой степени отличается как от первоисточника, так и от интерпретаторов реальных систем. Те м не менее он дает довольно ясное п редставление о ядре интер п рета­ тора и его работе, а также показы вает, как легко и и зящно семантика Лиспа поддается оп ределен и ю и програ мм ированию и на других языках. При необходимости интерпретатор можно расши­ рять, добавляя в систе м у новые ветви и определения функций. Испол ьзуя ту же технику, можно также реализовать новые языки програм мирования высокого уровня для различных п риложений. В реал изаци и ин т е рпретатора будем испол ьзовать чисто функцио­ нальное програ мм ирование. П р и м а тивы инте рпр етато ра

Пусть на ш интерпретатор наз ы вается EVALt в отличие от интерпретирующего его системного интерпретатора EVAL. Соответственно назовем и интерпретируе м ые на м и базовые функции: CARt , CDRt . CONSt , EQUALt и ATOMt . Кро м е того, будем испол ьзовать соответству­ ющее предложению LAMBDA предложен ие LAMBDAt и формы COND1 и QUOTEt . Тt , NILt и числа будут константами систе м ы. Во время вычисления предполагается, что вызывае· мы е пользователе м фун кции оn ределены n редложение м

176

4 При м е ры n ро г ра м м

LAMBDA1 , которое я вляется с войством FN имен и фун кции. Примени м в нашем и нтерnретаторе в отличие от Коммои Лиспа ди намический сnособ выч ислен ий. Ун и версал ь ная функция EVAL1 Предположим, что связи перемен ных хранятся в ассоциати вном списке С ВЯЗИ. В ы числен ие форм п роисходит путем ин­ терпретации их структур и выполнения соответствующих действий. Ун иверсал ь­ ную фун кцию EVAL1 можно определить приведеи н ы м н иже условным п редложен и-. ем:



( de fun e va l 1 ( форма &opt i o nal ( связи n i l ) ) ( c ond ( ( аt о ш форма) ; форма ат омарная ( c ond ( ( eq форма ' t 1 ) ' t 1 ) ( ( e q форма ' n i l ) ' n i l 1 ) ( ( nuшЬегр форма) форма) ( ( саг ( as s o c форма связ и ) ) ) ( t ( f огшаt t

" "' Х У ат ома нет связи : "' S " форма) ) , , голова формы - ат ом ( ( аt о ш ( с аг форма) )

( c ond ( ( eq ( с аг форма) ' qu o t e 1 ) ( с аdг форма) ) ( ( e q ( с аг форма) ' c ond1 ) ( e va l - c ond ( с dг форма) связи ) )

; ; вызов функции ( ( ge t ( с аг форма) ' fn ) ( ap p l y 1 ( ge t ( с аг форма) ' fn } ( е vа l - список ( с dг форма)

связ и ) связи } }

4 . 1 Лис п н а Лис пе

177

, , встроенная функция ( t ( ap p l yl ( с аг форма) ( еvаl - список ( с dг форма) связ и ) связ и ) ) ) ) , , LАМВDА1 - пред�ожение < t ( app l yl ( с аг форма) ( е vа l - список ( с dг форма) связи ) связ и ) ) ) )

Из определения видно, что есл и ФОРМА просто перемен пая (т. е. не константа Т1 , N I L1 или ч исло), то ее значение получают с помощью фун кции ASSOC из п редстав­ ленного в форме а-с писка вычисл ител ьного контекста С ВЯЗИ. Фун кция EVAL-CON D оп ределяет семантику условного оператора COND1 : -

( deft.ln eva l - c ond ( ветви конт екст ) ( c ond ( ( nu l l вет в и ) ' n i l l ) ( ( no t ( e q ( e va l l ( с ааг в ет в и ) конт екст ) ' ni l l ) ) ( e va l l ( с аdаг ветви ) конт екст ) ) ( t ( e va l - c ond ( с dг ветви ) конт екст ) ) ) )

Е сли форма - это сп исок, первы.й элемент которого имя функции, то вы ражение можно вычисл ить, полу­ чив LАМВDА1- п редложение, соответствующее имени функции, как свойство под именем FN с по мощью функции GET и применив его при помощи фун кции APPLY1 . Форма может быть непосредственно LАМВDА1вызовом с фактическими параметрам и:

((LAМBDA1 фор-параметры тело) факт-парам етры) Эту ситуацию обрабаты вает последняя ветвь EVAL1 .

118

4 Примеры nроrрамм

Основна я часть интерпретатора: APPLYt

Функция APPLYt отвечает за примене­ ние функции к значениям своих apryментов_ С ее помощью оп ределены ..... . . также и базовые функции интерпрета­ тора: CA R1 , CDR1, CONS1 , АТОМ1 , EQUAL1 и LАМВ DА1-предложение: ( defun app ly1 ( фун кциg аргументы свgзи) ( cond ( ( at o m функция ) ; базовые ф ункции < c ond ( ( eq

функциg ' carl )

( cond ( ( eq ( саг аргуме н т ы ) ' n i l 1 ) ' ni l l )

( ( eq

; ; Гопава NIL1 - зто NILt

( t ( сааг аргументы) ) ) )

tункциg ' cdr1 )

( c ond ( ( eq ( саг арг ум ент ы ) ' ni l 1 )

' ni 1 1 )

; ; Хвост NILt - это NIL1 ( ( nul l ( cdar аргументы) ) ' ni l 1 )

( t ( сdаг аргументы) ) ) )

( ( e q функциg ' c ons l )

аргумен т ы ) ' ni l 1 )

( cond ( ( e q ( саdг

( l i s t ( car аргументы) ) ) ( t ( c o ns ( car аргументы) ( c adr аргументu) ) ) ) ) ( ( eq фYJUЩНSI ' at.olll ) ( cond ( ( аtош ( car аргументы) ) ' t1 ) < t ' ni l 1 ) ) ) ( ( eq tувкциg ' equal 1 > < cond ( ( equal ( car аргументы)

( cadr аргунентм) )

' tl)

Н . ' ni l 1 ) ) )

4 . 1 Л исn

иа

Лиспе

179

( t ( fo гmat t " · ХНеизвест ная функция : · S " функциR ) ) ) )

( ( eq < с аг функция ) ' l ambda1 )

; ; лямбда- вьазов C eval 1 f caddг функциR) ( создай-связи f c adг фун к ция )

аргументы связи) ) )

( t ( t е г рг i >

t>

( ус т анови о т с т уп )

( p pг i nt ( с аг 1 > ( + отступ З > > ( рр - хв ост ( с dг 1 ) от ступ ) ) ) )

( defun уст анови ( n ) ; ; выводит n пробелов ( c ond ( ( = n О > t > 11 "> ( t ( p г i nc ( уст анови ( - n 1 ) ) ) ) )

_( ppг i nt ' ( 1 i s t ( с аг х > z> > > > < L I ST ( CAR Х > ( CONS ( CAR У > ( CDR Z ) ) >

т

( c ons ( c ar у >

_( ppг i nt 1 ' ( c o n d ( ( nu 1 1 х > n i 1 ) ( c ar х> ( с d г у > > > > < COND ( ( NULL Х > NIL > < Т ( CONS ( CAR Х > < CDR У > > > >

( с dг

( t ( c ons

т

Програм м ирование диалога с ПОМ ОЩЬЮ функций PPRI NТ1 , READ и PRI Nx можно запрогра м м ировать цикл диалога ( top l eve l ) нашего и нтерп ретатqра Лиспа EVALt . В при ведеином н и же опрf:i�е­ лен и и в качестве п р и глашении и нтерпрета­ тора будем ис пол ьзовать с и м вол "

"

.

будет с и м вол

( defun интерпрет ат ор n i l ( pгo gn ( pг i nc " На111 Лисп : " > < t егрг i ) < t егрг i ) < pг i nc " < - " > ( d o ( ( выражение < ге а d > < г е а d ) ) ) ( ( e q выражение ' конец> ' до - свидани я ) < pг i nc " - > " ) ( ppг i nt l < e val l выражение ) 3 ) ( t е г рг i )

( p г i nc " < - " > > > >

_( интерпрет ат ор )

Haw Лисп :

- > РЫБИРI- ЭОНТИК < - ( c o n s l < quo t e l а> < qu o t e l -> < А В С> < - конец · Д О-СВ ИД АНИЯ ->

( Ь с> > >

Про граммирование вво да и вы вод а В оп и санном выше и нтерпр ет аторе Л и спа для ввода и вы в ода выражен и й мы и спол ьзовал и с и сте м н ы е фун к­ ц и и ввода и вы вода. Чтобы можн о было реал и зова т ь и нтерп ретатор Л и с п а в какой­ н и буд ь другой сред е, нам, естествен н о п р и­ дется отдел ьно запрогра м м и роват ь в в од н вы вод выражен и й. Уточн и м ввод и в ы вод сп и сков на с и стем ном уровне. Рассматр и вае­ мые функц и и работают со сп и скам и , в кото­ рых для отл и ч и я в место круглых скобок

о С]

186

4 Приме ры nрог ра м м

используются угловые скобки "". Пус то й список обозначается с и м волом "" без п робела. О п редели м п ростую фун кци ю ЧИТАй -ВЫ РАЖЕ­ НИЕ, которая вводит выражения с угловы м и скобками и строит из них обычные списки. Для простоты предпо­ лож и м , что скобки п и ш утся отдел ьно от символов и друг от друга, чтобы и х можно бы ло проч итать с помощью фун кци и READ, не вдаваясь в детали пред­ ставления атомов н а уровне знаков. Затем запрограм­ м ируем функцию ВЫВ ЕДИ -ВЫ РАЖЕНИЕ для вы вода скобочных выражен ий с угловы ми скобками. Структуру, или синтаксис, скобоч ных вы ражен и й ( последовательности знаков) можно оп редел ить следу­ ющи м и рекурсивн ы м и правила м и в форме Бэкуса -Нау­ ра: хв ос т вы.раж ен. и е -+ "" < "'' вы. раж ен. и е -+ < > в ы. р в ы. раж ен. ие -+ атом а ж 11 >11 -+ хвост е н. и е -+ хв ост хвост вы

р

( 1) (2) (3)

(4)

( 5)

а ж ы "выражен ие" и "хвост" явля ют­ этой записи символ ся нетерм и н ал ь н ы м ие н си ие м волами ( non-term i nal), а "атом" соответствует п роизвольному лисповскому атом у. "Вы ражение" - это или атом, ил и п устой список "", или последовател ьность, состоя щая из открываю­ щей скобки " < " и рекурс и в ного "выражения" и "хвоста". " Х вост" в свою очередь это или закрывающая с кобка ">", или последователь­ ность, состоящая из "вы ражения" и рекурсив­ ного "хвоста". На основе вышеперечислен ных правил можно определить функцию ЧИТАй - ВЫРА­ Ж Е Н И Е , кото р а я буде т читать выражение строить соответствующую ему сп исочную внутренню : структуру данных и возвращать ее значение. Ф у н к ци я чтения состоит из двух взаимно рекурси вВ



4 . 1 Лисn на Лисnе

187

( defun читай-выражение ( ) ( l et ( ( х < read ) ) ) ( c ond ( ( e q х ' < ) ; nравило 1 ( c ons < читай-выражение ) ( читай-хвост ) ) ) ( ( eq х ' ) n i l ) ; nравило 2 ; nравило 3 ( t Х) ) ) )

( defun читай-хвост . ( ) < l et < < х < read ) ) ) < c ond ( ( eq х ' > ) n i l ) ; nравило 4 ( ( eq х ' < ) ; nравило 5 < c ons ( c ons ( читай-выражение ) ( читай-хвост ) ) < читай-хвост ) ) ) ( ( eq х ' < > ) ; nравило 5 ( cons ni l < читай- хвост ) ) ) ; nравило 5 ( t ( c ons х ( читай-хвост ) ) ) ) ) )

вых функций, ветви которых соответствуют правилам грамматики 1>. _( читай-выражение ) ; введенвое выраже�ие ; сnисочное представление А _( читай-выражение) ; выражение < а < с > < < d > > > < А ( С) ( ( D HI L ) ) ) ; списочное предст авление

а

Теперь можно написать и функцию вывода ВЫВЕДИ­ ВЫРАЖЕНИЕ: _( defun выведи-выражение < х>

( cond ( ( nul l х>

' ) )

nравило 2

( ( atoa х) ( prin1 х> > ; правИIIО 3 1) См. с.

186. -При м. ред.

4 П римеры п ро гр ам м

188

( t ( pr i nc " < " ) ; правнпо 1 ( выведи -выражение ( с аг х ) ) < выведи - хвост ( c dr х ) ) ) ) )

В ЫВЕ Д И- В ЫР АЖЕ Н ИЕ -

( de fun выведи- хвост ( х ) ( c o nd ( ( nu l l х ) ( p r i nc " > " ) t ) ; правнпо 4 < t < pr i nc " " ) ; nравнпо 5 ( выведи- выражение ( с аг х ) ) ( выведи- хвост ( c dr х ) ) ) ) )

ВЫВ Е Д И - Х ВОСТ

_( выведи- в ыражение ' ( а ( Ь )

ст к е

+

Ь • с)

=

выражение

Основная идея алгоритма состоит в следующем. Из п редJIОжен ия последовател ьно друг за другом выбира­ ются с и м волы и помещаются л ибо прямо в дерево, л и бо в стек на то время , пока другие с и м волы не будут помещены либо в дерево, л ибо в стек над этим симво­ лом. Если считан н ы й с и м вол - это величина (конс­ танта ил и переменная), то его помещают п рямо в дерево. Если это - операция, то ее помещают или в дерево, или в стек в соответствии с тем, выше или н иже ее п риоритет, чем приоритет операции, н аходящейся в верхней ячейке стека (или NIL). Когда все символ ы п рочитаны до конца, все н аходЯщиеся после этого в стеке операции перено­ сятся в дерево и на этом анализ заканч ивается. Стек здесь выступает в рол и комнаты ожидания, в которой операци и с более низким п риоритетом ждут, пока не п ройдут более высокоприоритетн ые операци и.

4.2 Микс и ма

193

Более точно можно сформулировать ал горитм следую­ щим образом: Алгоритм разбора: 1.

2. 3.

4.

5. 6.

7.

Если предложение пусто, то перейти к п. 6 , и наче взять следующий сим вол. Если символ является переменной или константой, то перенести его в дерево и перейти к п. 1 . Если символ - зто операция, и стек пуст, то помес­ тить символ в стек и перейти к п. 1 . Если приоритет операции выше приоритета верхней операции, уже н аходя щейся в стеке, то поместить ее в стек и перейти к п. 1 . Если приоритет операции меньше и л и равен прио­ ритету верхней операции в стеке, то поместить операцию из стека в дерево и перейти к п. 3. Если стек пуст, то дерево разбора готово и алго­ ритм на этом заканч и вается. Переместить символ из верхушки стека в дерево и перейти к п. 6. Ал горитм п реобразует выражения в так называемую обратную польскую (reverse Pol i sh) запись, в которой с и м вол операции следует непосредственно за аргументами (операндами), например:

=> (а Ь +) (а + Ь) ( а + Ь • с) => (а Ь с • +) ( а • Ь + с) => (.а Ь • с + ) Если в выражени и встречается подвыражение, то его можно анал изировать, рекурсивно вызывая тот же алгоритм:

((а + Ь) • с) => (а Ь + с • ) П о мере перемещения с и мволов в стек ил и в дерево над ними можно было бы выпол нять разл и ч ные действия, касающиеся их формы или п орядка. Перемещая, напри мер, в дерево сим вол операции , можно выпол7 З а к 547

194

4 При меры nрограмм

н ить и саму операцию, если только , конеч но, у находя­ щихся в дереве символов-аргументов имеются значе­ н ия, для которых определена и выполнима данная. опера ция. Можно также определить и некоторую форму: записи или язык, к которому преобразуется выражение! в случае, если выполнение операции еще невозможно. :

Пр едста u ени е в ы ра же ни !l в фор ме де ре ва С точки зрени я си м вольной обработки предпочтительнее преобразовывать выра­ жения в форму дерева, в которой легко обрабатывать все подвыражения целиком. Так и будем поступать: всегда, когда в дерево перемещается символ операции, будем вносить изменение, преобразующее два верхних элемента дерева и сим вол операции в дерево в префиксной форме:

т

( . . . а Ь)

=+

( . . . (+ а Ь ))

; ; ; ;

два вер хних элемента дер е ва и символ добавляем о й о пер ации п р е о бр азуется в дер ево в п р ефиксноа ф орме

Это

преобразование в в едем в реализующую наш алгоритм разбора фун к цию АНАЛИЗИРУй в виде функции ПР Е ОБРАЗУй. ( defun анализируй ( дерево стек выра.ение) ( c ond ( ( nu l l выражение) ( i f ( c ar стек)

( nрео6разуй дерево стек выражение) ( car дерево ) ) ( ( at o m выражение ) выражение) ( ( at o m ( c ar выражение ) )

( c ond ( ( no t < me mber < car выражение)

•действия•> )

195

4.2 Микси ма

( анализируА ( c ons ( c ar выражение )

дерево) стек { c dr выражен и е ) ) ) ( ( старые ( c ar выр ажение ) { car стек) )

( анализируй дерево { cons { c ar вырuевие ) ) стек) ( c dr выражение ) ) ) { t { nреобразуА дерево стек выражение)

{ t { анапизируй { cons { анап из ир уй ni l ' ( ni l ) { car выра��е ние ) ) дерево) стек { c dr выраже н и е ) ) ) ) ) .

{ defun преобразуй { дерево стек выражение) ( анап изируА { c ons ( l i s t ( car стек) ( c adr дерево ) ( c ar дерево ) ) { cddr дерево ) ) { c dr стек)

выражение) )

Определять старшинство операций Р и Q будет п редикат СТАРШЕ, который воз­ вращает значение Т, если Р старше, т. е. стоит в списке •дЕйСТВИЯ• раньше Q, а иначе возвращает N I L: ( defun ст арые { р q ) ( or { nu l l q ) { me mber q ( me mb e r р •дейст вия•> > > > 7*

196

4 Примеры программ

Теперь можно попробовать иреобразовать выражение в форму дерева: _( анализируй ni l ' ( ni l ) ( + А < • В С) )

' (а + Ь • с) )

Порядок о б хода дерева Выражения, п редставляющие деревья, могут быть получены с помощью трех раЗJiичных поряд�еов обхода (walk order), позволяющих систематически обойти все узлы дерева. Возможными порядками обхода я вляют­ ся: t. Прямой порядок (preorder).

Префиксная запись ( prefix): ( + а (* Ь с)).

t . Обработать узел.

2. Обойти левое поддерево.

3. Обойти п равое поддерево. 2.

П ромежуточный порядок ( i norder). Инфиксная заnись ( i nfix): (а + (Ь * с) ) . t . Обойти левое поддерево. 2. Обработать узел. 3. Обойти п равое nоддерево.

3.

Обратный порядок (postorder) 1>. Постфиксная запись (post f i x, suff i x): (а (Ь с • ) + ) . t . Обойти левое поддерево. 2. Обойти п равое nоддерево. 3. Обработать узел.

Первый и третий способы названы nольской записью (Polish form) в честь их изобретателя польского математика Л. Лукасевича. Их иреимущество перед вторым способом состоит в том, что для них скобки t) Здесь авторы в выборе терминов исходят из получающеrося вида записи. Д Кнут в книrе нискусство проrраммировани�. т. 1, дает немного отпичающуюся класси ф икацию. -ПриJА. перев.

4.2 Миксима

197

вообще не нужны. Порядок выполнения операций и так ясен на основании порядка следования символов. Польскую запись часто используют в машинных ; программах, трансляторах и интерпретаторах. Интерпретация и в ы ч исление выражени й Рассмотрим в качестве примера вычисление выра­ жений в постфиксной или обратной польской записи. Вычисления можно проводнть, используя простой стековый алгоритм по следующей схеме:

Стек = ( ) ( kona sant t i )

( defun nереведи-с�ово ( с�ово ключ ) " Переводит с�ово соr�асно ключу" ( l et ( ( частис�ова ( де�и с�ово ) ) ( частиключа ( де�и ключ) ) ) ( долrота-r�асноА ( first частис�ова) ( second частис�ова) ( f irst частиключа) ( second частиключа) ) ) ) Дол гота и созвучи е гласн ы х

Исходя из ритмики языка, долгая гласная в начале исходного слова nриводит к удпинению гласной в начальной части ключа:

((luu ta) (ko ntti))

'

-+

((koo ta) (lu ntti))

Сохранение продолжительности гласной выполняется функцией ДОЛГОТА-ГЛАС­ НОй, которую мы определим в общем виде, в том числе и дпя слов, оканчивающихся на долгую гласную:

( defun до�rота-r�асной ( начало1 конец1 нач�о2 конец2 ) "Заботится о сохранении до�rотм r�асных nри nереводе"

210

4 Примеры nроrрамм

( c ond

( ( долгая-кон? вачало1 ) ( cond

( ( долгак-кон? начало2) ( помениА-части вачало1 коне ц1 начало2 конец2 ) ) ( t ( помеuй-части ( укороти началоt > конец1

( удлини вачало2 ) конец2 ) ) ) ) { ( долгая-кон? начало2 > ( поме1151Й-части ( уДIIИни вачало1 ) ковец1 ( укороти вачало2 ) конец2 ) )

( t { поневий-части начало1 конец1 вачало2 конец2 ) ) ) )

ДОЛГАЯ-КО Н? проверяет Предикат - А.. � наличие долгой· гласной в конце слова:



( defun долгая-кон? ( слово)

" Определиет , кончаетси ли слово на дол­ гую гласную" ( долгая-нач? ( reverse слово> > >

Короткие слоги удлиняются, а дли нные укорачивают­

ся функциям и УДЛИНИ и УКОРОТИ:

( defun укороти ( слог) "УдаtRет последний элемент списка• ( i f ( not ( rest слог ) ) ni l ( c ons ( f irst слог) ( укороти ( rest слог) ) ) ) ) ( defun удлини ( слог>

" Добавл51ет в конец списка его последний элем�:tнт "

4.3

Язык с:метн ика

211

( i f ( nu l l ( rest cnor) ) ( cons ( f irst. cnor) слог) ( cons ( f irst слоr) ( удпиви ( rest слоr) ) ) ) )

Фу н кция ПОМЕНЯй-ЧАСТИ меня ет начальные части ключа и переводимого слова в вызывает функцию СОЗВУЧИЕ, которая приводи т глас­ ные к созвуч ию:

( defun поиеКАй-части ( начало1 конец1 начало2 конец2 ) " Меняет нача11ьные части с11ова и KIIIOЧa" < I i s t ( созвучие начапо1 конец1 ) ( созвучие начало2 конец2 ) ) )

Созвучные слова в фин с ком языке содержат либо гласные переднего, либо заднего ряда. т. е. в од н о м слове не может быть одно временн о гласных как перед­ него (а о u), так и заднего ряда (а iS у). В то же время гласные среднего ряда (е i) мо гут встре­ ч атьс я в одн ом и тои же слове с гласными в переднего, и заднего рядов. Функция СОЗВУ­ ЧИЕ объединяет части слова, приводя при необходимости конеч ну ю часть слова в созвучие с начальной: ( defun созвучие ( начало конец) " Сог11асовывает звучание конечноfl части CIIOBa"

( c ond ( ( nереднее начало) ( соедини начало ( вперед конец) ) ) ( t ( соедини начало ( назад конец) ) ) ) ) ( defun переднее ( слово) '' Опредеn51ет звучание гnacвofl в слове" ( i ntersec t. i on слово передни е - г ласные ) ) ( set.q -.иередвие-rласные•

'

( 1\У 1\i 1\6) )

4 П р име р ы п рогра мм

212

Заметьте, что буква У прописная, а а и б строчные. Это следствие того, что а и о в коде ASCI I не используются как буквы и Коммои Лисп не заменяет их в имени ато­ мов на прописные. Согласование звучания происходит при помощи функций ВПЕРЕД и НАЗАД: -

-

( defun вперед ( слово ) " Преобразует задние гласные в передние" < suЫ i s • < < 1\U . 1\У> < 1\А 1\а> < 1\О . 1\о> > слово > > •

( defun назад < слово) " Преобразует передние гласные в задние" < suЫ i s • < < 1\У . 1\U> < 1\а . 1\А> < 1\о . 1\О> > слово ) )

Функция (SUBLIS а-список, выражение) - встроенная функция, которая заменяет вхождения в список ВЫРАЖЕНИЕ заданных в а-списке ключей на соответс­ твующие им значения. Например: _< suЫ i s • ( ( один one > < два . two > > • ( один два t hree ) ) ( ONE TVO ТНRЕЕ > •

Перевод слов и пре дложени й Теперь созвучные части слова в форме списков букв можно соедин ить в атом функцией СОЕДИНИ: ( defun соедини ( начало конец) " Строит символ из двух списков знаков " ( i ntern < c oerce ( append начало конец) • s t r i ng ) ) ) ·

213

4.3 Язык спдеТН;.!КЗ

И далее мы уже можем поп робовать перевод одиночных слов: _( переведи- с�ово ' sana ' ko nt t i )

( KONA SANTТI > _< перев �ди-слово ' aan i ' ko nt t i )

( KOONI АNТТI )

Чтобы можно было переводить целые п редложения, определим еще функцию ПЕР Е ВЕДИ-ПРЕДЛОЖЕ­ НИЕ : ( defun переведи-предложение

( предложение ключ ) "Переводит слова предложения согласно ключу" ( i f < nul l предложение ) ni l ( append

( переведи- слово ( f irst предложение) ключ ) < переведи-предложение ( rest предложение) ключ ) ) ) )

_( переведи-предложение ' ( s i nahan o l e t a i ka ve i t ikka)

' kont t i )

< KONAHAN S I NТTI KOLET ОNТТI КОI КА ANTTI KOI TI KKA VENTTI > (На русском языке это выглядело бы так: _( переведи- предложение ' ( ты ведь боль�оА чудак) ' конт и ) < КО ТЫНТИ КОДЬ ВЕНТИ КОЛЬЫОЯ БОНТИ КОДАК ЧУНТИ> - Пере в . ) Аналогичным образом, подбирая лишь новый ключ, можно определить другие родственные языку сплетни ка языки. Самыми известными являются, например, языки с ключевыми словами: vede, risa, raappa, punka, vis и lekkeri , а также с

4

214

Примеры п рограм м

шведским СJiовом f i kon. Их

простой заменой ключа:

м"Ь1

получим всего лишь

_( переведи-nредпо.ение ' < s i niЬan o l e t a i ka ve i t itka) ' vede > ( VENAIIAN SIDE VELEТ ODE VEI O ADE VEI TI ПA VEDE ) _( переведи-предпожение ' ( kan du tala svenska) ' f ikon> ( FI N IAION Fl DUКON FILA TAION FI NSO SVEION>

Расши рение до цwrанскоrо •арrон а

При помощи функции ПЕРЕВЕдИ-СЛОВО можно также легко о п редели ть цыганский жаргон, в котором ключевым словом '-L- � всегда я вляется сл едующее слово. Если поСJiеднее слово остается без пары, то его можно переводить или в одиночку, или хотя бы с тем же словом kont t i :

.t!JI ��

( defun нацыганскиА ( предпожение)

" Переводит предпожение на цыганский жаргон" ( c ond ( ( nul l предпожение) ni l ) ( ( nu l l ( rest предпожение) )

; ; поспедиее спово ( nереведи-спово ( f i rs t предпоаение) ' kont t 1 ) ) ( t ( append ( nереведи-спово ( f iгst предпожение) ( second предпожение) ) ( вацыганскиА < cddr предпожение) ) ) ) ) )

4.3 Язык

215

сметки ка

( нацыrанскиFI - ' ( s i nihin o l et a i ka ve i t ikka) ) < ONAНAN SI LET VEI КA AI TI КIA) _( нацыгавскиА ' ( s i niЬin aika ve i t ikka o l et ) ) < ANAИAI SI I IA OI TIIIA VELET) ( нацыгаискиА ' ( savo laiset kutsuvat se l l aista puhe t t a t,riD 08pe l ukseks i ) ) ( IC:UVOLAI SEТ SAТSUVAT PULLAI STA SЕВЕТIА ORAI ТYIIPEL ПSEISI )

Известно много н других видов игровых и тайных языков. Их можно грубо разделить на тре КJiacca: (1) слоговые языки, основанные на слогах (например так называемые птичьи языки), в которых некоторые сло ги добавляются, повторяются, удаляются или замещают­ ся или меняется их порядок; (2) неспоrовые языки, такие , напри мер, как только что представленные языки с кпючевыми словами; (3) их разпичные сочетани я . 1.

Ли те ра тура CampЬell L Generative Phonology vs. Finnish Phonology: Retrospect and Prospect. ln (Harms

1976). 2. Oott l uпd К. А. De Proverblis Fennicis Dissertatio. Uppsala, 1 8 1 8 .

4.

3. Harms T. R. , Kart t uпeп F. Pape rs from the Transatlantic Finnish Conference. Texas Li ngu i st i c Forum, No. 5, Dept of Li пguist ics, Texas Uпiversity, Aust i n, 1976. Jusleп i us D. Su o m e nkiele n sukulaisuudesta krei­ kan ja heprean kanssa. U ppsala , 1712 Ojaпsuu Н. Suomeп salakiel ista. Virittaja, No. 1 , 1907. Ojansuu Н. Suomeп kielen tutkimukseп t yomaal­ ta. Sarja esi telmia 1 . , Oummerus, Jyvaskyla, 1916. Knuut t i la S. Leena Heinosen pihaperinne. Lisen­ siaat fi t yo, Helsi ngi n yl iopisto, 1977. .

5.

6. 7.

216

4 Примеры nрограм м

8. Мii n tyla A. -L. Lei kki kiel ista. Semi naariesi telma. Kansanrunoust ieteen lai tos, Helsingi n yliopisto, 1970. 9. Seppanen J. Sananmuodostus leikki- ja salakielis­ sa. Sananmuodost uksen ongelmia, Suomen kieli­ t i eteel l isen yhdistyksen j ul kaisuja, No. 7, 1981 . 10. Seppanen J. Comput i ng Fami l ies of Nat ural Sec­ ret Languages. An Exerci se i n Functional Li nguis­ tics, Report No. 23, ТКК Laskentakeskus, 1982. 11. Seppanen J. Recursive Functions for Computation of Nat ural Secret Languages. Col i ng- 82, Prague, 1982. 12. Seppanen J. Обучая ЭВМ фолькп ору. The Sixth lnternational Finno-Ugric Congress. Сыктывкар, 1985. 13. Seppanen J. Tietokoneestako kiel iniekka? ·Ohjel­ moimme Leikki- ja salakielia, Noppi, Nokian opet usjarjestel mien asiakaslehti, 2/1985. 14. Vi rtanen L. Antti pantti pakana. WSOY, Porvoo, 1 972.

4.4 Да рв и н

211

Спец и ал ист - это ч ело ве к , к о­ торый п ер е стал .мы сл ить. Он только знает. Ф. Рай т 4. 4 • • • • • • • • • •

Д АРВИН

Струк тура э кспе рт ной системы Представпение з наний Машина в ы вода Факты и п ра в ипа П равипа в ы вода баз ы знаний Стратегия обратного в ы вода Ра бота системы Д а р вин П р име р ы зап р осов Расши рение си сте мы Д а рв ин Л и те ратура

Экспертная система (expert system, knowledge based system ) - это п рограмм пая система, знания и умения которой сравнимы с умением н знаниями специалистов в какой-нибудь специальной области знаний. Эксnерт­ ные системы вместе с системами обработки естествен­ ных языков являются наиболее важны м и в ком мерчес­ ком плане областями использования искус­ ственного интеллекта. Многие снетемы естественного языка можно считать н экспертными системами. Они я вляются экспертами в области лингвистики н, воз­ можно, общего языкознания. Многие алгебраические системы также считаются экспертными системами. В рамках исследований искусствен ного интеллекта созданы многочисленные экспертные системы для разных областей знания, таких, например, как меди­ цинская диагностика и обследование пацнентов, генные и молекулярные исследования, составление конфигурации вычислительных машин, образование, •,

218

4 П р имер ы программ

поиск неисправностей в устройствах и системах и многие Jфугие практическве приложения. В этой главе мы запрограммируем веболь ш ую "зоологическую" экспертную систему (Winston и Horn 1981 ), которую назовем Дарвин. Структура з кспе р тно А систе мы

Типичная экспертная система состоит из двух главных частей: .машины вывода ( i nference en gine ) в баэ111 знаний ( knowledge base). База знаний содержит данные и знания из области првмевенвя; способ решении п роблем, используемый в машиве BЬIВOJUI. ве привязав к данны.м иэ пред.метной о бласти (domain knowledge). Кроме того, в систему обязательно входит какой­ нибудь я з ы к взаимодействия человека с машиной, посредством которого пользователь-спецвалист ведет диалог с си�темой, а также в нее входят средства, при помощи которых инженер зн аний (knowledge engineer) и эксперт(ы) (expert ) поддерживают базу званий. П р е дставление з на ни А Дпя предстаВJJе ния знаний используют разJtичиые формапизмы и языки предстаВJJе ния данных. Наиболее часто встречается предстаВJJе ние знаний с помощью правил типа ЕСЛИ-ТО. В системе Дарвин правипа, описывающие припятне решения, можно задавать в форме, похожей на естественный язык:

(ЕСЛИ

усповие-1

И усповие-2

И усповие- i ТО вывод-1 И вывод-2 И вывод-j)

Условия и выводы - это простые предложевин естест­ веиного языка. Например:

4.4 Дарвив

219

( ECliИ на пампочку ПOli8RO напрg•евме И пампочка ве горит

ТО пампочка , вероятно , перегорела)

( ЕСйИ читатепь перес тап nонимать И читатепь хочет учитЪСR И читатепь � мо.ет читать

ТО читатепю RJ8RO начать все свачапа И читатепю следует 6мть nоввиматепьней )

Маш ина вмвоАа

Машина вывода это универсапьный механизм (проr­ рамма или аппарат), котор ый с помощью правил базы знаний строит новые выводы, задает допо.пните.пьные вопросы и так дапее до тех пор, пока не придет к какому-нибудь приемлемому конеч ному результату или -

ответу. Исходные данные и выводы, полученные в резул ьтате принитии решений, в дапьнейшем будем называть известными системе фак.тами (fact). В бол ее крупных системах база знаний содержит п ом и мо правил знании и других типов: факты об объектах проблемной области и их с вой с тва, ,цанные об обстоятельствах и событиях, иерархии понитий, метаданные и т. д. Работа экспертных систем основывается в первую очередь на обширной базе знаний. Работа машин вывода ч асто дово.пьно п роста и п римолинейна. Рас­ смотрим более по,цробно структуру машины принитии решений программы Дарвин. Факты и nравип а В системе Дарвин факты пре,цставлиютси просто в виде списков симво.пов. На п рим ер, следующий список мог

бы описьrвать наши знании

о каком-нибудЬ животном:

((ж и вотное и м ее т шерсть ) (ж и вотное п ол о сатое) (ж и вотное ж вач ное))

220

4 Примеры программ

База знаний системы Дарвин образуется из списков, подобн ы х ранее о п исанным правилами ЕСЛИ- ТО. На п ри мер: < se t q правило12 ' ( ЕСЛИ жи в отно е жвачное

И животн ое полосатое ТО животное зебра) )

Чтобы п равила можно бы ло свести к фактам, их условия и выводы необходи­ мо представп ять списками фактов. Являющиеся правилами предложения можно · _· 1 :� � ....___ ·-для этого иреобразовать в структуры, которые состоят из имени nравила и условий и выводов, представленны х в виде списка фактов: < defstruct правило ими условиg выводы)

Соответствую щую предыдущему правилу ПРАВИЛО12 структуру можно теперь создать при по м ощ и вызова: ( mаkе-правило : имя ' правило1 2 : условия ' ( ( животное 8Вачное ) ( животное полосатое) ) : выводы ' ( ( животное зебра) ) )

Если условия правила являются элементами какого­ нибудь списка фактов, то применение правила к этому списку фактов можно реал изовать путем добавления в сп исок выводов из п равила. Например, применив ПРАВИЛО1 2 к ранее п редставленному списку данны х, можно сделать заключение: животное о котором идет реч ь - это зебра.

4. 4 Дарвин

221

Правила вывода базы з нани А

Знания системы Дарвин о жи вотных содержатся в базе знаний, содержащей следуюtnие 14 правил: ( se t q ПРАВИ1101 ' < ECiiИ ЖИВОТНОЕ ИIIEET ЫЕРСТЬ ТО ЖИВОТНОЕ lfiiEКOПИТAКIJIEE ) ) < setq ПРАВИi102 ' < ECiiИ ЖИВОТНОЕ КОРИИТ ДЕТЕВЫШЕИ KOiiOKOK ТО ЖИВОtнОЁ КiiЕКОПИТАКIJIЕЕ ) ) ( setq ПРАВИIIОЗ ' < ECtiИ ЖИВОТНОЕ ИКЕЕТ ПЕРЬЯ ТО ЖИВОТНОЕ ПТИЦА) ) < setq ПРАВИ1104 ' ( ECiiИ ЖИВОТНОЕ УИЕЕТ iiЕТАТЬ И ЖИВОТНОЕ НЕСЕТ ЯИЦА ТО ЖИВОТНОЕ ПТИЦА) ) < setq ПРАВИ1105 ' ( ECiiИ ЖИВОТНОЕ ЕСТ КЯСО ТО ЖИВОТНОЕ ХИIIНИК> > ( se t q ПРАВИi106 ' ( ECiiИ ЖИВОТНОЕ ИИЕЕТ ОСТРЫЕ ЗУ6Ы И ЖИВОТНОЕ ИИЕЕТ КОГТИ И ГiiАЗА ЖИВОТНОГО ПОСАЖЕНЫ ПРЯКО ТО ЖИВОТНОЕ ХИЩНИК > > ( setq ПРАВИi107 ' ( ECiiИ ЖИВОТНОЕ КiiЕКОПИТАЮЩЕЕ И ЖИВОТНОЕ ИИЕЕТ КОПЫТА • ТО ЖИВОТНОЕ ЖВАЧНОЕ > > ( setq ПРАВИiiОВ ' ( ECiiИ ЖИВОТНОЕ НiiЕКОПИТАЮЩЕЕ И ЖИВОТНОЕ ЖУЕТ ЖВАЧКУ ТО ЖИВОТНОЕ ЖВАЧНОЕ> > ( setq ПРАВИЛОВ ' ( ECiiИ ЖИВОТНОЕ КiiЕКОПИТАЮЩЕЕ И ЖИВОТНОЕ ХИЬIНИК И ЖИВОТНОЕ IЕiiТО-КОРИЧНЕВОЕ И ЖИВОТНОЕ ИКЕЕТ ТEtlllblE ПЯТНА ТО ЖИВОТНОЕ ГЕПАРД > ) ( setq ПРАВИ1101 0 ' < ECiiИ ЖИВОТНОЕ КiiЕКОПИТАЮЩЕЕ

4 П р и мер ы программ

222

И JИВОТИОЕ ХИ111НИt И IИВОТВОЕ IЕПТО-КОРИЧНЕВОЕ И ЖИВОТВОЕ ПОПОСАТОЕ

ТО ЖИВО ТНОЕ ТИГР > > ( setq ПРАВИl101 1

' ( Еспи IИВОТВОЕ IВАЧВОЕ И ЖИВОТНОЕ ДfiИHHOidEEE И IИВОТНОЕ 4RИВИ ОВОГОЕ

И IИВОТНОЕ И1tЕЕТ ТEIUIЬIE ПЯТНА ТО JИВОТВОЕ IИPAt> )

< setq ПРАВИfi01 2 ' ( ЕСПИ ЖИВОТНОЕ ЖВАЧНОЕ

И ХIИВОТВОЕ ПОПОСАТОЕ ТО ЖИВОТВОЕ ЗЕ6РА> >

( se t q ПРАВИfi01 З

' ( ЕСПИ ЖИВОТНОЕ ПТИЦА И ЖИВОТНОЕ НЕ УИЕЕТ IIЕТАТЬ И ЖИВОТНОЕ 4RИВВОМЕЕЕ

и животноЕ дпинноногоЕ

И IИВОТВОЕ ЧEPBQ-&EfiOE ТО ЖИВОТН ОЕ СТРАУС> )

( setq DPAВИfi014 ' ( ЕСПИ ЖИВОТНОЕ ПТИЦА И ЖИВОТНОЕ НЕ УМЕЕТ аЕТАТЬ И IИВОТНОЕ llllAВAEТ И ЖИВОТВОЕ ЧЕРНО-&ЕаОЕ ТО ЖИВОТНОЕ ПИВГВИВ> )

-

.

Описаввые выше правила легко поиять п р ограммнету и создателю системы , и поэтому они ве требуют оn иса ни и Сле-

1 дующая функция АНАЛИЗИРУй берет

!1

список правил,

п равило

и

анализирует каждое

и реобр азует его к ранее опи ­

саввой структуре (ПРАВИЛО), полями которой я вляются: имя правила, условия и выводы: ( defun присоедини ( х у )

( append

х

( l ist у ) ) )

4.4

Дарвин

( defun 8118i1Изируй ( nравипа> • Анализирует правипа и составп11ет из них список• ( Epcar 1 ' авапизируА-nравипо nравипа) ) ( defun 8118i1ИЗ и руА-nравипо ( иМА ) •преобраэует nравнпо в форме npellfiOп­ IИI в ст рупуру• Пеt Н правипо ( eval ИМ51) ) ) ( 118kе-правипо : ИМ51 иJR : JCnoвiUI ( ycJIOIIIUI вравипо ) : ВЫВОДIII ( ВIIВOIIII правнnо ) ) ) ) ( defun усповмg ( предпо•вие ) "Возвращает усnовиА в виде сnиска• ( nредnо•ение-и ( cdr npeдno•eниe ) ni l ni l ) ) ( defun выводы ( nредnо•евие ) •Возвра���ает выводы в виде списха• ( nредпопние-и ( cdr ( 8811Ьеr ' то предпопние) ) ni l ni l ) ) ( defun nредnо•ение-и ( nредnо•ение часть резупьтат ) " ВыдеnАет nредnо•ени11 , раздеп11емме сим­ воnом и· ( cond ( ( nu l l nредnо•ение) ; ; усповие окончаниg ( nрисоедини результат часть) ) ( ( eq < car nредnо•евие) ' то) ; ; усnовие оковчавиА ( присоедини резупьтат часть) ) ( ( eq ( car предnо•ение ) ' и ) ; ; новое nредnо•евие ( предnо•ение-и ( cdr предn о•ение ) n1 1 ( nрисоедини резупьтат част ь ) ) ) ( t ( nредnо•ение-и ( cdr nредnо•ение ) ( присоедиви часть ; сnедув.аее ( car nредnо•евие) ) резуnьт ат ) ) ) ) ; спово

224

м м-----------р име р ы програ-4 П ����� ---

--------------

Прави л а в виде записей легко обрабатывать, и функци­ более высокого уровня не нужно знать об анализе данных ИJIИ деталях представления правил. Впоследст­ вии это облегчает возможную модификацию програм м и их дальнейшее развитие. Если бы правила представлялись, например, в виде списков, состоящих из условий и выводов, то на более высоком уровне пришлось бы иметь информацию о по­ рядке следования элементов в списке. Теперь же на части правил можно указы­ вать логическим именем. Правила системы Дарвин хранятся в списке •БАЗА­ ЗНАНИй•: ям

11

( setq -еаза-знаниА• ' ( ПР .АВИt101 ПР.АВИfi02 ПР.АВИfiОЗ ПР.АВИt104 ПР.АВИt105 ПР .АВИt106 ПР.АВИt107 ПР.АВИt108 ПР.АВИt109 ПР.АВИt1010 ПР.АВИt101 1 ПР.АВИt1012 ПР.АВИt101 3 ПРАВИt101 4 ) )

Проанализированные варианты правил сохраним переменной •ПРАВИЛА• следующей командой:

в

( setq !lnpaвиt�a• ( анмизируй -еаза-знаниА•> )

1

Значением переменной •ПРАВИЛА• будет список, состоящий из структур. Предположим, что система Дарвин сохраняет известные ей факты в списке •ФАКТЫ•, состоя­ щем из элементов данных. В этом случае приме­ нимость правила можно проверить функцией ПРОВЕРЬ-ПРАВИЛО и выводы правила можно при необходимости добавить к фактам функцией ДОБАВЬ-ВЫВОДЫ: ( defun nроверь-правиt�о ( nравиt�о )

" Проверяет nрименимо 11и nравиt�о" ( nодмно•ество ( nравиt�о-усt�овия nравиt�о) -tакты•) ) ·

4.4 Дар ви н

225

( defun подмно•ество ( nодмно•ество мно•ество) "Проверgет , 51ВЛ51етс51 ли мно•ество подмно•еством" ( eq ua l подмно•ество < i ntersec t i on подмно•ество мно•ест во ) ) ) ( defun добавь-выводы ( nравило ) " Расwир51ет список фактов выводами правила" ( do ( ( выводы ( nравило- выводы правило} ( cdr выводы) ) ) ( ( nul l выводы) Wфакты•> ( if ( member Е car ·выводы) lfфакты•> ni l ( format t " Согласно правилу ·S : " ( nравило-им51 правило ) ) ( выведи- элементы ( car выводы) ) ( push ( car выводы) -tакт�) ) ) ) ( defun выведи-элементы ( список) " Выводит элементы списка• ( mapc l ' ( l ambda ( элемент ) ( pr i nc элемент ) ( pr i nc • " ) ) список) < t erpri > t > Стратеги я о б ра т но го вывода Ма ш ина вывода применяет п равила к известны м в текущий мом ент системе факта м дп я нахо жден ия нов ы х фа к тов до тех пор, пока в резул ьта­ те применени и не будет поп учен ис ко м ый рез ул ьтат. Е сп и у систе м ы недостаточно и нфор м ации дп я дап ьнейше го поиска ре ш ения, то она запраши вает у п оп ьзова­ теп я дополнительную и нфор м ацию и сохраняет ее в с во е м с п иске фа ктов, а зате м п ытаетс я еще раз при ме­ в ить к свои м п равила м новые дополнительные факты И

Т. Д.

8 Зак 547

4 П р име р ы п рогр амм

226

В исследованиях по искусственному интеллекту создан ы различные с п особы нахождения решения и выполнения действия. В системе Дарвин м ы п ри м еним обратный вывод (backward chaini ng), в котором ре ш ение п ытаются найти, идя в обратном направлении : от конечного результата.

Ра б о та сис темы Д а рв ин

Систему Дарвин на самом верхнем уровне можно представить как распознавателя жи вотных, который пытается на основе своих правил доказать некото р ую гипотезу. Представи м возможные конечные результаты в виде списка •ГИПОТЕЗЫ* : ( se t q •гипотезы' ( ( IИВОТНОЕ ( IИВОТНОЕ ( ЖИВОТНОЕ ОКИВОТНОЕ ОКИВОТНОЕ ( ЖИВОТНОЕ

ПИНГВИН> СТРАУС) ЗЕБРА>

ЖИРАФ>

ТИГР > ГЕПАРД) ) )

Все эти гипотезы встречаются в части вывода некото­ рых правил. При обратном выводе условия этих правил можно и нте рпр етировать как новые гипотезы, если вывод я вляется конечным результатом, и так далее. Так система порождает гипотезы более низкого уровня до тех пор, пока не обнаружит, что новых правил для порождения гипотез больше нет. Тогда систе­ ма запрашивает условия правила непосредст­ венно у пользователя, которые о н на это м уровне уже, вероятно, сможет задать сам и не будучи специалистом, затем система с по­ мощью новой информации пытается продви-_ нуться дальше в своих выводах: , , , Глоб&льiiЬlе динамические пepeмeRIIЬie ; значение определено ( def'var �ипотезы•> ;

B ЬIIde

4.4 Дарвин

;

227

; значение опредепено ; вы111е ; ; Гпавная программа Ларвив

( defun l!арвив ( ) •Экспертная система дпя расnознавания 11ИВОТНЫХ8

; ; внутренние динамические nеренеиные ; ; оnредепим fормой DECLARE ( dec l are

( spec ia l !lфактыw ; найдеиные tакты ; утверждения , о -эаnросы•> > ; которых задавался ; воnрос nопьзоватепв ( знаток-зверей 8Гипотезы-> > ( defun знаток-зверей ( гиnотезы) • пытается nроверить к�иибудь гипотезу• < cond

( ( nul l гиnотезы) " Не могу доказать никакув из извест ­ ных мне гипотез • ) ( ( докажи ( car гиnотезы) ) ( car гиnотезы) ) ; резупьтат < t ( знаток-зверей < cdr гиnотезы) ) ) ) ) ; новая nоnытка

Доказательство гипотезы или утверждения, можно выпол нить при nомощи следующей процедуры:

Процедура Докажи: Дано :

Доказываемая гипотеза.

Значение:

Значение функции истина, если данную гипотезу можно доказать.

Действия: 8*

-

228

4 Пр и ме ры п рог ра мм

1.

Если гипотеза уже есть в списке фактов, значит она доказана.

2.

Если это н е так, то соберем все правила, с по­ мощью которых можно было бы доказать гиnотезу, т. е. те п равила, в части вывода которых есть п ровернемая гипотеза. Если какое-нибудь из этих п равил можно прямо применить к списку фактов, то, значит, гипотеза доказана. Если н икакое из .собранных правил нельзя применить, то попытаемен доказать применимость какого-либо правила, доказав все условия п равила, взяв их как новые гипотезы и рекурсивно применив п роцедуру Докажи.

3.

Есл и описанные действия не дают результата, то спросим у пользователя, верна ли гипотеза (если только это уже не спрашивалось), и если она � верна, то присоединим утверждение к списку фактов. Присоединим утвержде ние к списку •ЗАПРОСЫ• независимо от ответа, чтобы потом это же самое не пришлось повторно спрашивать.

1

Эту рекурсивную п роцедуру можно непосредственно программировать. Все три ветви вышесписанной процедуры помечены в определении соответствующими комментариями: ( defun докажи ( гиnотеза) ( l e t ( ( nравила) ) ( cond { ( member гипотеза •факты•>

t) ; ветвь 1 ( ( set q правила ( возможные гипотеза) ) ; ветвь 2 ( i f ( nрямо гиnотеза nравила) t ( рекурсивно гипотеза правила) ) ) ( t ( c ond ( ( member гипотеза �апросы•> ; ветвь З ni l )

4 . 4 Дар вин

229

< < and ( pr i nc " Эт о правда, что : " ) ( выведи- элементы гипотеза) ( eq < read > ' Да) ) ( setq ttфакты• < un i o n ( l i s t гипотеза) ttфакты•» t ) ( t < push гипотеза �апросы•> ni l ) ) ) ) ) ) ( defun возможные ( гипотеза) "ВозвраJ118е Т правила, доказыва1011U1 е по­ тенциальну. гипотезу" ( варсаn 1 ' ( laabda < х > ( i f ( member ( правило-выводы х> гипот еза : test l ' e qual ) ( l i s t х» > -равила•> > ( defun прямо ( гипотеза возможные ) "Проверяет , можно ли доказать гипотезу непосредственно при помо� какого­ ниБудь правила" ( cond ( ( nul l возможные) ni l ) ( ( nul l ttфакты•> ni l ) { ( проверь-правило ( car возможные ) ) ( добавь-выводы ( car возможные ) ) ) ( t < прямо гипотеза ( cdr возможные ) ) ) ) ) ( defun рекурсивно ( гипотеза возможные > " Рекурсивно проверяет гипотезу" { cond { { nul l возможные ) ni l ) ( ( проверь-непрямо { правило-условия { car возможные ) ) ) ( доБавь-выводы ( car возможные ) ) ) ( t ( рекурсивно гипотеза { cdr возможные) ) ) ) ) ·

230

4 П р име р ы прог р амм

( defun проверь-непрямо ( усповия ) "Рекурсивно проверяет все усповия" ( every l ' докахи усповия ) ) 1

На основании своих правил программа Дарвин может задавать пользователю лишь разумные с точки зрения гипотезы вопросы. Однако первую гипотезу приходится выбирать наобум. При ме ры за просо в

Теперь немного побеседуем с п ро граммо й Дарвин В первом примере пользователь видит перед собой пингвина, во втором зебру, но животных он не знает. С по­ мощью п рограммы Дарвин он может опре­ делить виды этих животных, давая системе п ростые ответы на ее вопросы: .

_( Дарвин) Зто правда, что: IИВОТНОЕ ИИЕЕТ ПЕРЬЯ ; вопрос Да ; ответ попьзоватепя Cornacнo правипу ПРАВИliОЗ : IИВОТНОЕ 11ТИЦА Зто правда, что: IИВОТНОЕ ВЕ УКЕЕТ fiЕТАТЬ Да Зто правда, что: ЖИВОТНОЕ УКЕЕТ ппАВАТЬ Да Зто правда, чт о : IИВОТНОЕ ЧEPR0-6EfiOE Да Cornacвo правипу ПРАВИl1014 : IИВОТВОЕ пиигвин ( ЖИВОТНОЕ ПИНГВИН) ; резупьтат _( Дарвин ) Зто правда, чт о : IИВОТНОЕ ИИЕЕТ ПЕРЬЯ Нет Зто правда, что : IИВОТВОЕ YltEEТ nЕТАТЬ Нет

4.4 Дарвин

231

Это правда, что: ЖИВОТНОЕ ИМЕЕТ ШЕРСТЬ аа Согласно правилу ПР.АВИfi01 : ЖИВОТНОЕ

ИiiEICOПИTAКII&EE

Это правда , что : ЖИВОТНОЕ ИМЕЕТ КОПЫТА аа Согласно правилу ПРАВИfi07 : ЖИВОТНОЕ ЖВАЧНОЕ Это nравда, что: ЖИВОТНОЕ ПОйОСАТОЕ аа Согласно правилу ПР.АВИfi0 1 2 : ЖИВОТНОЕ ЗЕБРА ( ЖИВОТНОЕ ЗЕБРА)

Расши р ение систе м ы Да рв ин

Похожие на Дарвина tеонсультирующие (consul t i ng) экспертные системы обычно способн ы в какой-то мере обосновывать разумность своих вопросов и сделанных выборов, отвечая на поставленные пользовао телем вопросы. Обосновывающую и другую информацию можно запросить во время диалога, задавая вопросы типа: ЧTQ-ЗHA­ ElliЬ-05, ПОЧЕМУ-СПРАШИВАЕШЬ и КАК­ ТЫ-РЕШИЛ-ЧТО. Так пользователь системы может убедиться в разумности действий системы и может сам обучать систему, вводя в нее свои знания. Дополнить систему Дарвин элементами такого рода довольно просто. На вопрос ЧТQ-ЗНАЕlliЬ-ОБ прог­ рамма могла бы отвечать перечисленнем известных ей фактов или подходящим их подмножеством. На вопрос ПОЧЕМУ-СПРАШИВАЕШЬ можно было бы сообщить выводы п равила, относящегося к доказываемой гипоте­ зе (условию) или выдать всю цепочку выводов. На вопрос КАК-ТЫ-РЕШИЛ-ЧТО можно было бы в удобно й форме вывести в качестве ответа цепочку выводов утверждения (гипотезы), относящуюся к вопросу.

2 32

4 Прим е р ы про г ра мм

С и с те м у Дарв и н можно бы л о бы расширить и так, ч тобы и мелась возможность с помощью переменных задавать правила в более общей форме точно так же, как это делалось в ранее рассмотренном сопоставлении с о б р азцо м ил и в интерпретаторе Пролога. Например: (ЕСЛ И (? х) это нскоторый (? у) И (? у) ц ве та (? z) ТО (? х ) цвета (? z))

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

Литература 1 . Charniak Е. , Riesbeck С . и McDermot t D. Artificial Intelligence Programming. Lawrence Erlbaum As­ soc i a t es, Hi l l sdale, New Jersey, 1979. 2. Hyvonen Е . Asiantuntijajarjestelmien tietamystekniikka. Knowledge E ngi neeri ng Ку, 1 986, Helsi nki . 3. Masi nter L. , Shrobe Н . A I Program­ m i ng t echnology : Languages and Ma­ chi nes. AAAI -83 Conference Tut ori a l , Washi ngton о: с. , 1983. 4. O' S hea Т. , Eisenst adt М. (Eds. ) Artificial lntel­ ligence: Tools, Techniques and Applications. Har­ per et. Row, New York, 1984. 5. Shapi ro S. Techniques of Artificial Intelligence. D. Van Nost rand Company, New York, 1979. 6. Thompson Н. , Richie G. Implemen t i ng Nat ural Laпguage Parsers. I п (O' Shea and Eisenstadt 1 984). 7. Wi nston Р. и Horn В. Lisp. Addi son-Wesl ey, Readi ng, Massachusetts, 1981 ( первое издание ) , 1 984 ( второе и здание ) .

m

4 .5 Солнечная система

233

В селенная - это великий си.м.­ вол Б ог а. Т. Карл ейль 4. 5 • • • • • • • •

СОЛНЕЧНАЯ СИСТЕМА

Сн ачала бы ли с озда ны н е бо и Зе м л я Ок н о в кос м ос Сол н це , плане т ы и спутники И все-таки о н а ве р ти тс я Вра ще н ие м сп утн ика у пра вляет де мон Создание н е б ес н ы х тел Зап уск Сол н еч но й сис тем ы Ли те р а тур а

В этой главе в качестве примера объектного п рограмми­ рования запрограммируем астрономическую модель, представляющую и делающую более наглядны м строение и функцион и рование Солнечной системы (Symbolics 1 984). Модель описывает Солнце и планеты Меркурий, Венеру, Землю, � Марс и их спутники. При п рограммировании • будем испол ьзовать Зеталисп Лисп-м аш и н ы и систему Flavor. Цель главы - п роясневне п ринцилов и возможностей объектного программирования. Что касается деталей Зеталиспа, то сошлемся лишь на описание (Weinreb и Moon 1981 ). Система работает следующим образом: на экране открывается окно, и в нем появляется м и гающее Солнце. Планеты со своим и спутниками располагаются вокруг Солнца на своих астрономических местах. Планеты начинают вращаться вокруг Солн ца по своим орбитам с правильным соотношением скоростей. В то же время спутники начинают вращаться вокруг своих планет по траекториям, складывающимся из двух вращательных движений: вращения планеты вокруг Солнца и вращения спутника вокруг своей планеты.

IJc::=!lf/ /J1fljJ.

4 Примеры пporpauu

234

Снача.п а б ы.пи созданы небо и Зем.па Снача.па опреде.пим центр Солнца и Солнеч­ ной системы как точку на экране с координа­ тами (375, 375): ( defconst сопице-х 375 ) ( defconst сопнце-у 375 )

Другие константы - это диаметр Солнца и радиус орбиты Земли: ( defconst диамет р-сопнца 1 0 ) ( defconst орбита-земпи 149)

Планеты и их спутники опреде.пим как переменные: ( defvar меркуриА ) ( defvar венера)

( defvar ( defvar ( defvar ( defvar ( defvar

земпя) пуна) марс) фобос ) деАмос )

Вечерняя звезда Спутник: Земпи У lfapca два спут н ика

.. Окно в кос мос "Окно в космос" можно опреде.пить с помощью оконной системы Зеталиспа как объект-окно простого типа ТV: WINOOW:

( defflavor к:осмос-окно ( )

( tv : иindov) )

Приставка ТV: указывает на используемое в оконной системе пространство имен ТV, которое содержит объект WINDOW. Создадим окно ТV: WINOOW функцией ТV: МAКE­ WINOOW и присвоим его значение перемен­ ной КОСМОС, чтобы обеспечить себе возмож­ ность в да.пьнейшем ссыпаться на него. Аргументами вызова ТV: МAI(E-WINOOW будут тип создаваемого окна космос-окно.

4.5 Сопнечная система

235

а также заголовок окна (: LABEL). координаты углов окна (: EDGES). Бла годаря параметру : BLINKER- P N I L окно создается без курсора. =

( setq космос ( t v: make-window ' космос-окно ' : l abe l " Внутренние_планеты" •

: Ы i nker-p n i l

' : edges ' ( 0 О 749 749 ) ) )

Соп нце, ппане ты и сп утники Чтобы обобщить опредепения разных небес н ы х о п ределим базовый объект с и менем ТЕЛО:

теп.

( deffl avor тело Те�е координаты ( (z 0) ( J 0) ; т ела ( цевтр-z z) ; Цент р , вокруr которого ( центр-J J) ; тело вр�тси радиус-орбиты ; РадИус орбиты ( след n i l ) ; Если CfiEД ес т ь Т, т о ; �ело оставлиет за собой nиви•, сост ои� из т очек ( угол 1 ) ; Угол обрааении т ел а скорость Относительнаg скорость т ела ( : 0 . 1 ) относительно ; скорости Земли ; Диаметр т ела размер) ; Не принадлежит друrим () ; классам об'ьектов

: settaЫ e - i nstance-var i aЫ e s ) ; Ио.ао присваивать ; перенеиным сост ояния

Планеты и спутн и ки так же. как и Солнце, - это небес вые тела. Их можно определить как подкласс т ел , другими словами, как подаромат а ромата ТЕЛО:

4 П р имеры п рог рамм

236

( deffl avor планета ( ( сnутник-список ni l ) ) ( те�tо ) : se t t aЬ l e - i ns tance-var i aЫes > ( deff l avor спутник ( ) ( те�tо ) )

Для объектов типа ПЛАНЕТА к переменным состояния объекта типа ТЕЛО добавлена переменпая СПИСОК-СПУТНИКОВ, в которой будем сохранять спутники каждой планеты. По умолчанию у планеты нет спутников, СПИСОК-СПУТНИКОВ N I L. =

Q • Галилео Галилей.

И все - таки она ве ртится Вращение как планет, так и спутн и ков вокруг центрального тела п роисходит по одни м и тем же законам природы. Для планет телом, вокруг которого они враща­ ются, я вляется Солн це, а для каждого спутника - пекоторая планета. Это движе­ ние для всех небесных тел можно опреде­ л ить одни м свойством, связан ным с телом методом : ВРАI.ЦАйС.Я:

( defaet hod ( тело : вр�с я ) ( ) ( l e t ( ( относит -угоll скорость ) переме�ние ) ; Уг11овое изменение ; ПOIIOIIeHИSI T e ll a ( l oop unt i l < = относит -угоll 0 ) do ( i f ( > от носит -уго" 1 0 ) ( progn ( se t q от носит-угоll ( - отвосит - угоll 1 0 ) ) < se tq переме�ние 1 0 ) ) ( progn ( setq перем�ение относит -угол ) ( se t q относит -уго" 0 ) ) )

4.5 Сол н еч ная

система

237

< setq уго� ( + уго� переме�ение) ) ( send s-w : dгaw-f i l led- i n- c i гc l e х у размер t v : alu- xoг ) ( se t q х ( f i x ( + центр-х < • s i nd градус ) радиус-орбиты) ) ) ) ( set q у ( fix ( - центр-у < • ( cosd градус ) радиус-орбиты) ) ) ) < send s-w : dгaw-f i l l e d- i n-c i гc l e х у размер t v : alu-xoг ) ) ) )

Идея метода состоит в осуществлении движения тела наращиванием углового перемещения с шагом в десять градусов (переменная УГОЛ). Перемещение каждого тела вычисляется в виде относительной величины, зависящей от значения его скорости ( переменная ско­ РОСТЬ). С помощью функций S I N D и COSD (синус и косинус) при каждом изменении угла вычисляются новые координаты положения планеты. Чтобы можно было нарисовать в космосе точ ку, соответствующую небесному телу (окно КОСМОС), полученные значения округЛяются функцией FIX до целых чисел. Рисование осуществляется активацией в окне КОСМОС с истем ного метода, запол ня ющего о к ру ж н ост ь : DRAW- F I LLED- I N-CIRCLE, которому в качестве аргументов передаются координаты х и у центра закрашиваемой окружности, диаметр и пара­ метр цвета, с помощью которого оп ределяется логика и изменение цвета точек экрана ТV: ALU-XOR. Вследствие того, что закрашивание п роисходит через каждые десять градусов, небесное тело выглядит на экране равномерно двигающимся кружком. -

Вращением спутника у пр авляет де мон время обращения планет необходимо следить кроме их перемещения и за тем, чтобы менялея центр обраще­ ния спутн и ков планет. Эт о можно зап рограм м и ро ват ь nри помощи следя щего демона, входящего в м етод : ВРАЩАйСЯ. Демон в соответств и и с перемещением Во

238

4 П р име р ы п рог р амм

планеты изменяет центр обращения спутни ка и запускает вращение спутни­ ка с п режнего углового положения. Следящий за перемещением центра обращения демон определен только для объектов типа ПЛАНЕТА, но не для объектов типа ТЕЛО, как метод : ВРА­ IЦА йС.Я. Перемещение спутника п роисходит только тогда, когда метод : ВРАIЦАйС.Я применяется к объекту типа ПЛАНЕТА: ( def.e t hod ( планета : after : вр�си ) ( ) ( l oop for спутник i n спутник-список do ; ; Установка координат центра обр�ении ; ; объекта СПУТНИК . < send спутник : sе t - центр-х х > ( send спутник : sе t- центр-у у> ; ; Изменить поло•ение спутников . ( send спутник : вр�си ) ) )

Создание не бес н ы х те.n Теперь можно о п ределить функцию СОЛНЕЧНА.Я-СИС­ ТЕМА, создающую Сол нечную систему и поддерживаю­ щую ее функционирование: ( defun солнечнаи-система ( ) ; ; Подготовка окна ( send космос ' : expose ) < send космос : c l ear-vindov> ; ; Очерчивание солнечного круга ( send космос : drav- c i r c l e солице- х солнце-у диаметр-солнца tv : alu-xor) ; ; Отметка орбиты Земли ( send космос : drav- c i rc l e х у орбита-земли tv: alu-xor)

239

4.5 Солнечная система

( se t q марс < make - i ns t ance ' планета ' : радиус 228 ' : скорость . 053 ' : размер 4 ) ) ( se t q фобос ( make- i nstance ' спутник ' : центр-х ( send марс : х ) ' : центр-у < send марс : у) ' : радиус 7 ' : скорост ь 1 1 4 . 4 ' : размер 1 ) ) ; ; Создание планет и спутников ( setq меркурий ( mak e - i nstance ' планета ' : радиус 58 ' : скорост ь . 416 ' : размер 3 ) ) C setq веиера ( make - i nstance ' планета ' : радиус 108 ' : скорость . 41 6 ' : размер 5 ) ) ( s e t q земля ( make- i ns t ance ' планета

' : радиус радиус-земли ' : скорос т ь 1 ' : размер 6 ) ) •

( se t q луна { make- i nst ance ' спут ник ' : центр-х ; Определяется ( send земля : х) ; по Земле ' : центр-у ( send земля : у) ' : радиус \5 ' : trace t Спутник ос ­ тавляет след ' : скорость 1 . 3

' : раэ�р 2 ) )

240

4 П ри мер ы п ро г рамм

( se t q деймос ( make- instance ' спутник ' : центр-х ( send марс : х) ' : центр-у ( send марс : у) ' : радиус 1 2 ' : скорость 30 . 4 ' : размер 1 ) ) , , Присваиванне спутников Земле и Марсу ( send земпя : sе t -спутник-список ( l i s t луна) ) ( send rlapc : sеt-спутник-список ( l i s t фобос деймос ) ) ; ; Запуск Солнечной системы П оор do ; ; Пусть всегда светит солнце! ( send космос : draw- c i rc l e центр-х центр-у ( - диаметр-сопнца 3) t v : alu-xor ) ( send космос : draw- c i rc l e центр-х центр-у ( - диаметр-солнца 1 ) t v : alu-xor ) ( send космос : draw-circle центр-х центр-у диаметр-солнца tv: al u-xor) ; ; Пусть вра111810Т С Я планеты! ( send меркурнА : враll(ай с я ) ( send веиера : вр�ся ) ( send земля : вр�ся ) ( send марс : вр�ся ) ) )

З а п уск Соп неч н о А систе мы В конце функции СОЛНЕЧНАЯ-СИСfЕМА запустим Сопнечную систему, поспав объектам необходи м ые сообще ния ( : ВРАЩАйСЯ). 1.

Л и тера тура Wei nreb D. , Moon D. Lisp Machine Manual. Fourt h Edi t ion, Symbolics l nc. , Мassachusetts, 1981 .

m

4.5 Солнечна я снетема

241

2. Tapola Р. Ol iokeskei nen ohjelmointi - ZetaLisp i n maku-kasite. В сб. : Е . Hyvбnen, J . Seppanen, М. Syrjanen (eds. ) SТеР-84 Symposium Papers. Publications of Fi nnish Society of lnformation Processi ng Science, No. 3 , Espoo, 1984. 3. Symbolics: Solar-system-esi merkkiohjelma. Zeta­ Lisp-kurssin oppi materiaalia. Symbolics lnc. , Мas­ sachusetts, 1984. -

5 РА311И11Е J13Ь1КА J1ИСП И JIИСП­ СИСПМ 5. 1 11СТ0Р1Ь1 JIIICIIA 5.2 .ПВСП PAOIPOCТP.AIUIEТQI ПО СВЕП 5. 3 JIИйJ-CICТEМЬI I 5. 4 JIИCII-МAIII НЬI

Л юбой язы�е програ.��tмирования - это не тоАысо фор­ мальная система обозначений. С язы�еом связаны та�еже история его возни�еновения, разви­ тия, распространения и использования, а та�еже его влияние на общее развитие науJСи и техниJСи; у JСаждого языJСа прог­ раммирования есть таJСже социальная и стороны, историчесJСая яв.ляющиеся частью истории науJСи и техниJСи. Именно Джон история и поJСазывает истинные роль и Matctcapтu. значение JСОНIСретного языJСа программи­ ,. оте ц Ли спа• . рования или от/Срытия. В этой г.Ааве рассмотрим историю развития Лиспа и Лисп-систем от зарождения язы�еа до появления Лисп-машин. В предыдущих главах было поJСазано, что ядро Лиспа сравнительно .лег/Со реаАизовать и его можно расширять при по.мощи са.��tого Лиспа. Начиная с 60-х годов появилось много реа.Аиэаций яэы�еа для различ­ ных машин. Разными пgrяАи развива.лись различные версии или диа.леJСты, �еаждый из �еоторых расширял .лисповсJСое .мышАение, черты и форАы языJСа. Со временем воJСруг ра зных диа.АеiСТов Лиспа и их реализаций возниiСАU и развuись раз.личны.е шJСо.лы и направАения иссл едований , а та�еже програ.м.мное обеспеч ение, т. е . фор.��tирова.Аась Лисп-�еу.льтура. В этой главе мы даним представ.сение о развитии различных Лисп-систе.м и соиrветствующих "JСу.льтур" и об их наиболее важных научных и географичесJСих признаJСах.

5.1

Исторви Лиспа

24З

НС7ория IJ"ит то•g, что ua ис­ тории .мм ни"е•g не fi'ШJ/lCЯ.

Б. Шоу

5. 1 ИСfОРИЯ .ПИСПА •

• • • •

Оте ц Лиспа - Д ион Ма ккарти Об ра бо т ка списков и и скусственн ыli и нтеллект З на ч ение Лиспа Ранние р е ад иза ци и Лиспа Литература

В настоящее время Лисп - старейший язык после Фортрана из широко испол ьзуемых языков п рограммирования, но было время, когда Лисп не занимад такого знач и мого попожеиия в программироваиии, какое он занимает сейчас. До 80-х годов Лисп в основном испол ьзовался теоретиками программирования как формадьный язык и быд средст­ вом лабораторных исследовани й искусствеиного интеллекта. Настоящий расцвет языка, по- видимому произойдет в ближайшем будущем, когда ожидается пояВJiение большого числа систем и машин с искусст­ венным интеллектом. Отец Л испа - Дион Ма кка рт и

Лисп не является результатом коллективной деятель­ ности комитетов или поиска компромиссов, он п режде всего отражает личное видение сущности и & возможностей п рограммирования одного человека, Джона Маккарти. Возраст языка и продолжающийся рост его применен ии вне рамок чисто научных лабораторий показывают, что в идеях Маккарти есть нечто значимое и непреходящее.

@

244

5 Развитие языка Лисп и Лисп-систем

Джон Маккарти родился в 1927 г. , он изучал математику в Калифорнийском техническом универси­ тете (Caltt:ch) и окончил его в 1948 г. Там он работал некоторое время помощником Джоиа фон Неймана, а затем продолжил учебу в � Приистоиском университете. Здесь он познакомился с Марвином Минским, также учившимся в Принстоне. В 1952 году Клод Шеинон - п ионер теории ин­ формации - пригласил Ма�'карти на рабо­ Клод Ш е н.нон . ту в лаборатории Вel l System. Четыре года спустя Маккарти присвои­ ли звание доцента Дартмутского колледжа, откуда он в 1958 г. перешел в Массачусетский технологический и нститут (MIT) на должность профессора по связи. Здесь он вместе с Марвином Минским начал работы по п роекту искусственного �нтеплекта и взялся создать такой язык п рограммирования, который бы хорошо подходил для программирования задач искусственного интеллекта. Свою пвоперскую работу по разработке Лиспа Маккарти осуществлял в МIТ с 1958 по 1963 г. , после чего он перешел в Стенфордекий университет в Калифорнии, где стал работать профессором по искус­ ственному интеллекту. ·



Об ра б о тк а с п и с к о в и и скусств е нны й интелл е кт Интерес Маккарти к алгебраической обработке списков и к исследованию искусствею10го интеллек'fа побудил его принять участие в 1956 г. в Jlетней ш коле по искусственному интеллекту в Дартмуте (США), которая считается пер­ вой организованной встречей по исследо­ ваниям в этой обJ1асти. На этой ш коле А. Ньюэлл, Дж. Шоу и Г. Саймон предста­ вили раз работан н ы й и м и язык IPL (Newell Алан Ньюэлл. et al. 19 6 8 ). I PL я во�-.ялся языком обработки списков для вычислительной машины Johnniac фирмы Rand Corporat i on. Он был предназна­ чен для програм м ы искусственного и н п:лле кта Логик­ теоретик вывода теорем логики. Позднее Гер6ерт Саймон получил Нобелевскую прсм ию (1978 г. ) за свой

5.1 Исто р ия Лиспа

245

вклад в применение вспомогательных средств принятия решений в области экономики и орган изации деятел ь­ ности . I PL не получил широкого распространения из-за своей чрезмерной близости к машинному языку. Однако благодаря ему родилась идея хранения прог­ рам м и данных в памяти в виде структур, связанных ссылками, везависим ы м и от :) физического расположения структур, в виде списков. Для списков не нужно было заранее резервировать в памяти веко� рую область, их можно было создавать, изменять и удапять динамически. Перво­ Дж. к. "Ctlfr начальная идея списков заимствована из психологии и ранних исследований по Шоу. ассоциативной памяти. Маккарти в то время работал в MIT на вычисли­ тельной машине I BM 704, подаренной университету фирмой IВМ. В это же время в I BM уже проектировап­ ся первый язык программирования высокого уровня Фортран. Сначала у Маккарти была мысль реализовать обработку списков IPL в.Фортране. Однако этой идее не суждено было сбыться. Маккарти участвовал также в работе Комитета по языку Алгол 60, но и там не нашел понимания и одобрения своих мыслей. Так он постепен­ но пришел к своему особенному языку программирова­ ния.

�-"",

З н ачение Лисп а

Маккарти осознавал значимость структур и форм представпения в задачах искусственного интеллекта. Он уже давно говорил о специальной теории представления (representat ion t heory). Предcтaвлeнue энaнuй (knowledge represenRand tat i on) составляет центральную часть -· """"'-' с.. современных исследовани й по искусственному интеллекту. Для символьных цепочек. I PL Маккарти придумал основанную на скобках форму п редставления, иерарх и­ ческую списочную запись, а также точечную нотацию соответствующую внутреннему представлению. Ис-

'

1

246

5 Развитие языка Лисn и Лисn-систем

пользуя повитие пустого списка - NIL, ему удмось элегантно оп р еделить основные алгебраи ческие дейст­

вии по обработке списков. Так родились примитивв ые функции и предикаты: CAR, CDR, CONS, АТОМ и EQ, необходимые дп и анализа, конструировании и с рав н ении списков. Из лимбда- исчиспев ии Ч ерч а (Church 1941) дп и определении функций он заимствовм абст рактвое и достаточно простое понитие лимбда- вы ражев и и. Этот подход позволил "Дерево естествеиным образо м описывать функции жизни". и передавать и м параметры. Может быть самой важной была идеи об единооб­ разном представпевии программ и данных в виде списков, благодари чему стма возможной как р абота с п рограимой и ее интерпретации в кач естве данных,

r

так и интерпретации данных и работа с ними как с проrраммой. Единая форма представлении программы и данных дапа возможность определении семантики языка и проrраммировавии его интерп ретатора в самом языке. Благодари единообразному представп ению программ и данных функции можно передавать в качестве параметров другим функциям ( фувкциовапы), также стмо возможным преобразовавие, самоизмене­ ние и порождевие новых программ во в ремя их испоп­ вении (сравните с обучением, адаптацией и т. п. ) .

Лисп входит в число наиболее значимых и долго­ вечных языков проrраммировании. Его влияние на исследовании в области искусствен иого интеллекта и

технологии званий особенно проив:и.пось в интерактивном программировании, методах ---- � фувкционапьвого программировавии, в 1 ' •1 ро расп ространении в п грамм ировани и идей что е рекурс и вного подхода, а а т кж в том, многие идеи в последстви и были вкпючевы l(rmuJcrcud в более новые языки проrраммировавии. cuiUIO.c Развитие Лисп-систем повл ияло на рас п росдОАгоитравеиве систем разделении времени в 60-х ru.a. в 7Q-x годах, а также на распространение в 80-х годах дасплеев, позволяющих работать с окнами (desktop metafora). Однако ванболее существенвое

��

�fW

5. t История Лиспа

247

значение заключается все-таки в математической системе повятий и формаJiизме, оказавшем большое влияние на развитие программирования как науки. Ранние реализации nиcna

Первая реаJiизация интерпретатора Лиспа появилась осевью 1958 г. , когда в MIT вачаJiись исследования по проекту искусствеиного интеллекта, пред­ ложениого Маккарти и Минским. Первый интерпретатор был реализовав на компь­ ютере IBM 704. Позднее на основе этой версии были разработаны более развитые версии Лиспа для вычислительвой маши­ вы IBM 7090 и в дальнейшем дли серий IBM 360 и 370. Компьютер I BM 704 плохо подходил Марвин Muнcrcua. для работы в интерактивном режиме. Убедившись в этом, вебольшая группа разработчиков, в том числе и из фирмы IВМ. отделилась, чтобы основать свою собственную фирму для разработки и производства более совершеиных машин. Так родилась вычислительная машина PDP-1 (Programmed Data Processor) и небольшая мастерская под названием Di gi tal Equi pmeпt Corporat ion, которая с тех пор превратилась во второго в мире по величине произво­ дители компьютеров. Именно новая вычислительная машива и вычисле­ нии в интерпретирующем режиме и создаJiи более благоприятные предпосылки для интерактивного программировавии. Написание, тестирова­ иве и отладку програм м можно было выполнять, не выходи из интерпретатора Лиспа. Этот привцип, известный теперь как "среда программирования", появился уже в системе Lisp 1, впервые представ­ леввой в 1960 г. С тех пор диаJiоговая и интерпретирующая среда программирова­ Герберт вия., а также пошаговое программирова­ Саilмон. вие, тестирование и отладка ( i ncremental programmi ng) призваны не только в Лисп-системах, во и во многих других интегрированных средах. Входящие

248

5 Развитие языка Лисп и Лисп-си стем

в систему вспомогательные программвые средства и различные утилиты в течение десятилетий развивзлись дальше и стали более разнообразными и разумными. В том же 1960 г. вышла ставшая классической статья Маккарти в жур­ __s- -.,., ' пале "Communicat ions of АСМ" (McCarthy 1960). В ней синтаксис и семантика языка Лисп определялись в виде алгебраи­ ческого формализма при помощи самого Лиспа. Этот формал изм с тех пор стал наиболее употребнмым языком записи в литературе по теории п рограммирова­ ния. Вскоре в Lisp 1 были обнаружены недостатки, которые привели к разработке новой версии. Через два года была готова система Lisp 1 . 5, и ее описание вышло в издательстве МIТ Press (McCarthy LISP 1 . 5 et al. 1962). Поскольку в описании системы Lisp 1 . 5 пояснялась также и ее реализа­ ция, то эта система стала основой, на которой базпро­ вались реализации для многих других машин. Эта книtа долго пользовалась спросом, и поэтому регуляр­ но выходили ее переиздания. После опубликования в 1 962 г. описания Lisp 1 . 5 начали появляться различные реализации Лиспа в США и язык стал распространятся в том числе и за рубежом. В следующем разделе м ы рассмотрим разви­ тие Лисп-культуры за п ределами США и после этого остановимся на наиболее важных используемых в настоящее время реализациях.

�А ......, .

v



Л итература 1. Вerkeley Е. С. , Bobrow D. G. The Programming Language Lisp: Its Operation and Applications. МIТ Press, Cambridge, Massachusetts, 1964. 2. Church А. The Calculi of Lambda Con­ version. Pri пceton Press, Pri nceton, Cal i fornia, 194 1 . 3. McCarthy J . Recursive Func t i ons of Symbo l i c Expressions and their Compu­ tat i on Ьу Machi ne, Part 1 , САСМ, Vol. 3, Apri l , 1960.

5. 1 И стория Ли с па

249

4. McCarthy J. , Abrahams Р. , Edwards D. et al. Lisp J . 5 Programmer' s Мапиаl. МIТ Press, Cambridge, Мassachuset ts, 1962. 5. McCart hy J. History of Li-sp. Proceediпgs of the АСМ С опfеrепсе оп the History of Programmiпg Laпgu ages, Los Angeles, 1977. 6. McCart hy J. Lisp - Notes on its Past and Fut ure. С опfеrепсе Record of the 1 980 Lisp Сопfеrепсе, Stanford University, 1980. 7. Newel l А. et al. lпformatioп Processiпg Laпguage - Maпual. The Rarid Corporat ion, 1968. 8. Sammet J. Programmiпg Laпguages: Н istory апd Fuпdameпtals. Englewood Cli f f s, 1969. 9. Stoyan Н. Lisp - Aпweпduпgsgeblete. Gruпdbeg­ riffe, Geschichte. Academie-Verlag, Вerl i n, 1980. 10. Stoyan Н. Early Lisp History. /п 1 984 АСМ Sym­ posium оп Lisp апd Fuпctioпal Programmiпg, Aust in, Texas, 1984.

250

5 Развитие языка Лисп и Лисп-систе м

067Jяснение вceil истории география.

Р. Уоррен

5. 2 ЛИОI PACПPOCТPAIUIEТCJI ПО СВЕП • • • • • • •

Развитие Лиспа в д.руrих странах Лисп в Запад.но А Е вроп е Лисп в Восточной Е вропе Лисп в д.а .п е к их с транах Лисп в Сканд.инавии

Ли сп в Фин.пянд.и, Л и тератур а

Раз витие Лиспа в д.р у гих странах

В этой главе дадим краткий обзор распространения Лиспа за п ределами США. Лисп довольно рано начал широко использоваться, но нигде в мире, за исключением некоторых университетов и исследовательских учреждений, не достиг заметного положения среди языков програм­ мирования. Ситуация быстро изменилась в 80е годы, но только время покажет, какое место займет Лисп в будущем. Обзор в основном опирается на подробное исследование, сделанное в работе Стояна (Stoyan 1 980 ).

i

Лисп в З апа д.н о А Европе

За пределами США интерес к Лиспу прежде всего пробудился ftj�-"· 9 в Великобритании, которая считается второй пос.пе США страной в области исследовани й искусственного интеллекта. Сразу после статьи Маккарти (1960) язык Алан Тьюр и н г. начали внедрять в Royal Radar Establ ish­ ment (Woodward и Jenki ns 1961). В начале 60-х годов в Англии приобрела популярность обработка ..

Ве.пикобритания.

5.2

Лисп распространяется по свету

251

списков (Foster 1968, Fox 1966), но, как п равило, Лисп использовался физиками, а не исследователями искусственного интеллекта ил и программистами. Цель последних заключалась в дальнейшем развитии подобных Алголу языков и вкл ючении в них • .\':a. r.l. средств работы со списками. Такими язы­ ::1.:. ками были BCPL и CPL, я вляющиеся предшественниками языка Си, а также язык РОР-2 (Burstal l et al. 1971 ), из которого впо­ следствии развился POPLOO. В 1964 году в lmperi al Col lege н ачал и использовать IBM 7090, для которой получили из Стенфорда систему Lisp 1 . 5. Это дало толчок для реализации Лиспа на вычислительной машине Атлас, paзpaбo­

CAMBRIDGE таиной в Манчестерском университете LISP 6 8 0 0 0 (d' lnverno 1969). В т о время Атлас был одной из самых производительных вы­ числительных машин в мире, а по архитектуре прототипом машин третьего поколения. Из других ранних реализаций необходимо упомянуть Лисп­ с и с те м у реализованную на компьютере ICL 1 905 в Университете Куинз и Интерлисп, реализованный на ICL 4 в Эдинбургском университете. Из английских реализаций Лиспа для микро-ЭВМ нужно отметить ВВС Lisp (Norman и Cat_tel 1983) и XLisp (Betz 1984), последняя из которых уже содержит объекты. ,

Фран ци я. Во Франции Лисп появился в Институте Блеза Паскаля в Париже и Университете Гренобля (Gohen 1965). Особенно важным для дальнейшего распространения Лиспа было издание учебни ка по Лиспу (Ribbens 1969) на французском языке. В 70-х годах Лиспом начали занв­ Шестой в Восьмой университеты UN!J � маться Парвжа в исследовательский центр lnria. Первыми реализациями Лиспа на французских компьютерах быпв системы, созданные дпя САЕ-510 в Telemechanique 1600 (Greussay 1972 в 1975). На основе зтого оп ыта возник французский диапект Лиспа -

lrвflll\.

5 Развитие языка Лисп и Лисn-систем

252

VLisp (Greussay 1976, 1977) и впоследстви и - LeLisp (Chai l loux 1980). И VLisp, и LeLisp родственны Мак­ лиспу, но на LeLisp, кроме этого, повлияли новые диалекты: Franz · Lisp, NIL. Зеталисп и Lisp Коммои fi исп. Однако следует отметить, Le что LeL1sp и Ком мои Лисп совпадают лишь в части ядра языка (Kernel Common Lisp). В 80-х годах работы, связанные с Лиспом, вепись во Франции довольно оживленно. Реализации языка LeLisp были осуществлены на многих различных компьютерах, в том числе на вычислитепьных машинах, созданных на базе микропроцессоров М68000 и Intel 8088/8086, на VАХ-11 и IBM ЗОХХ. Кроме того, разрабатывается множество других реализаций (Bel Мае 32, Sel 32, NS16000, DPS7, Mi ni 6, PR1ME и Norsk Data (Chai lloux 1985)). Созданы также реализации взыка LeLisp д.пя переовальных компьютеров Мaci n­ tosh и Lisa (Hardebeck 1985), а также сокращенная версия LeLisp 80 - для 8-битовых микро-ЭВМ (Cha i lloux 1983). Быстрому распространению системы с пособствовала п ростота переносимости, обусловлен­ ная виртуальным характером ее определения ( Chai lloux 1984, Devi n 1 984). В исследовательском центре Inria на базе этого определения сейчас создается Лисп-машина. По отношению к Лиспу, как и во многих других областях, французы шли в авангарде. Например, в и нтересах п рограммистов с дефектами зрения д.пя языка VLisp был разработан вывод по системе Брайля. Из специальных областей nрименения, где может использоваться Лисп, следует отме­ тить исследования в области компьютерной IRCAМ музыки, которые п роводятся в IRCAМ ( I nst i t ut de Recherche et Coordination Асоustiquе/Мusiquе) - центре музыкальных нсследова­ ний Франции. Размещается это учреждение в Париже рядом с Центром Помпиду. Цепь исспедований заклю­ чается в применении методов символьной обработки символов и объектного программирования в програм_

ф

� �

5.2

Лисп распространяется по свету

253

мировании музыкальных форм и структур (Coi nte и Rodet 1984). Во Франции издается единственный nосвященный Лиспу информационный бюллетен ь (Lisp Bul let i.n ).

О

ФРГ. В ФРГ Лисп появился в начале 60-х

годов также благодаря I ВМ 7090. Первыми учреждениями, где он начал использоваться, быпи GMD (Gesel lshaft fuer Мat hemat i k und Datenverarbei tung, Воnп) и университеты Бонна, Дармштадта и Майнца. Вначале так же, как и в Англии Лисп, п реимущественно использовался физи­ ками. Первые реализации Лиспа дпя немецких компьютеров TR4 фирмы Siemens быпи созданы в Марбургс­ ком (Melenk 1973) и Штутгартском университетах (LаuЬsсh 1976). Одна­ ко более важным считается решение фирмы Siemens начать сопровожде­ ние системы Интерписп. Интерпис­ повская версия языка быпа реализо­ "Frleden Schaffen oh­ вана в исследовательском центре немецкого языка (lnst i t ut fuer ne Waffen". си мвол движе ния зсz .мир и Deutsche Sprache) в Ман.гейме (Ерр проти в рсzз.ttе ще ния 1 977, Guпtermaпn 1978) совместно рак.ет Першин г в с Университетом города Уппсапа. ФР Г. В ФРГ созданы также Лисп-сис. темы дпя микро-ЭВМ. Из них п режде всего стоит упомянуть чисто учебную систему TLC-Lisp (Gorz 1983), разработанную в Университете города Эрпанген­ Нюрнберг. В 1985 году Герберт Стоян основал в ФРГ музей Лиспа. Музей размещается в Эрпаигенеком университе­ те и занимается сбором любых материалов, � касающихся Лиспа. В данный момент в музее собрано уже около 1 000 экземпляров различных изданий по Лиспу, которые также занесены в базу данных. Основание музея Лиспа - факт, свидетель­ ствующий не о том, что Лисп - это музейн ы й

'

254

5 Развитие языка Лисп и Лисп-систем

язык п рограммирования, а означающий лишь то, что язык занял свое место в истории культуры программи­ рования. будучи одним из самых первых языков п рограммирования в мире. Л ис п в Восточ н ой Е вро пе Со ветс к и й Со юз . В Советском Союзе Лисп не получил

очень широкого рас пространения, хотя Маккарти посетил страну еще в 1968 г. Основную часть времени Маккарти провел в Новосибирске. где заложил основу реализации Лиспа на машине БЭСМ-6 в Я З ЬI J( Вычислительном центре Сибирского отдел исп пения АН. Кроме того. при содействии Б. Беркли, входившего в эту группу. в Москве в ВЦ АН СССР началась реализация интерпретатора Лиспа для той же БЭСМ-6 (Лавров и Силагадзе 1969). БЭСМ-6 была мощной 48-битовой машИIIОЙ, предназначенной для научно-технических расчетов, с быстродействием около 1 м иллиона опера ций в секунду. созданной в 60-е годы. В начале 70-х годов разрабатывавшие интерпрета тор Лиспа для БЭСМ-6 С. Лавров и Г. Сипагадзе пере­ ехали из Москвы. С. Лавров перешел в Ленинградский университет, а Г. Силагадзе вернулся в Тбилиси в ВЦ Грузинс кой академии наук. Так появились два новых центра развития �� Лиспа и новые реализации языка на маши� ли песостоя­ тельность в применении к задачам по символь­ ной обработке списков и по исследованиям в об­ ласти искусственного интеллекта. ставшими главнымн задачами для компьК>теров нового по­ коления.

Конкуренция на .лисповско.м. рынке обостряется. Лисп­ п р иходя т к .м.ашины фир.м.ы Тexas 1 n­ дого в о ре нн ости strиments и Explorer фир.м.ы Положение Коммои Ли­ Sperry (теперь Unisys) выш­ спа как будущего стан­ ли на рынок в 1 985 и дарта подкрепляется ре­ 1 986 гг. шением производителей Лисп-маши н приспоеобиться к нему. Для компьК>теров. в основу которых заложен Зеталисп, это не означает больших изменений, так как они основываК>тся на испол ьзовани и Мак­ лиспа и уже по своему п роисхождениК> близ­ ки Коммои Лиспу. В этом отношении боль­ шуК> уступку сделала фирма Xerox, решив сделать Интерлисп похожим на Коммои Лисп. Средства Интерлиспа и интегрирован­ Кубок. нуК> среду можно перенести в Ком мои Лисп с неболь­ шими изменениями, но функции и ядро языка, напри­ мер способ вычислений, требуК>т больших изменений. П роизводители

Л и сп-ма шин

288

Б Развитие

языка Лисn и Лисn-систем

Литература 1. Abelson Н. , Sussman О. Structure and lnterpreta­

2.

3. 4.

5. 6. 7.

8.

9. 10. 11. 12.

13.

tion of Computer Programs. MlT Press, Cam­ bridge, Мassachusetts, 1983. Вates R. , Dyer D. , Koomen J. lmplementat ion of Interl isp оп t he VАХ Conference Record of the АСМ Symposium оп Lisp and Functional Prog­ ramming. Pi ttsburgh, Pennsylvania, Aug. 15-18, 1982. Bobrow 0. , Stef i k М. The LOOPS Manual. Xerox PARC, Palo Alto, 1983. Brooks R. A , Oabriel R. А Cri t ique of Common Lisp. In ( Воуеr 1984). Fateman R. J. Reply to an Edi torial. SIGSAM Bulletin. Мarch, 1973. Fateman R. J. Is а Lisp Machi ne Di fferent from а Fort ran Мachi ne? S/GSAM Bulletin. No. 12, 1978. Fat eman R. J. Views on Transportability of Lisp and Lisp-Вased Systems. АСМ Conference. SYMSAC' 81. Snowbl rd Utah, 1981 . Feigenbaum Е. , McCorduck Р. The Fifth Genera­ tion. Artificial lntelligence and Japan•s Com­ puter Challenge to the World. Addison-Wesley, London, 1983. Foderaro J. The Franz Lisp Manual - А Docu­ ment in Four Movements. Uni versity of Cal i for­ nia, Вerkeley, Cal i fornia, 1979. Ooldberg А. , Robson D. Smalltalk-80. The Lan­ guage and its lmplementation. Addison-Wesley, London, 1983. Hearn А. Standard Lisp. АСМ SIGPLAN Notices. Vol 4, No. 9, 1966. Henderson Р. Functional Programming. Applica­ tion and lmplementation. Prent i ce-Hall, London, 1980. [Имеется перевод: Хеидерсон П. Функцио­ нальное п рограммироваиие. Применеине и реа­ лизация. -М. : Мир, 1983 . ] Knuth D . The Art of Computer Programming. Vol. 2. Seminumerical Algorithms. Addison-Wes­ ley, London, 1969. [Имеется перевод: Кнут Д.

5.3

14. 15. 16.

17. 18. 19. 20. 21. 22.

23. 24. 25.

26.

Лис п-с истемы

289

Искусство п рограммирования. Т. 2 . - М. : Мир, 1977. ] Levi tan S. , Bonar J. (1981 ) Three Microcomputer Lisps. Byte, September. 1981. Mart i J. , Griss М. , Griss С. Standard Lisp Report АСМ SIGPLAN Notices, Vol. 14, No. 10, 1979, рр. 48-68. McDonald D. , Cli ppi nger J. Artificial lntelligence Computers and Software: Technology and Market Trends. Bratt le Research Corp. , Cambridge, Mas­ sachusetts, 1984. Moon D. MacUsp Reference Manual. MIT, LaЬo­ ratory for Computer Science, Cambridge, Mas­ sachusetts, 197 4, 1978. Moore J. S. The Interlisp Virtual Machine Specifi­ cation. Xero x PARC, Palo Alto, 1 976. Norman Е. Lisp Reference Manual for the Univac 1108. University of Мaryland, Мaryland, 1 968. Quam L , Diff i e W. Stanford Usp 1 . 6 Manual. Al Operat ing Note 28. 7 , Stanford University, Cal i ­ fornia, 1972. Pitman К. М. The Revised MacLisp Manual. AI Laboratory, МIТ LCS, 1983. Rees J. , Adams N. Т: А Dialect of Lisp or, LАМВDА: t he Ult i mate Software Tool. Conferen­ ce Record of the 1 982 Symposium оп Lisp and Functional Programming, Pi t tsburgh, Pennsyl­ vania, Aug. 15-18, 1984. Rees J. , Adams N. , Meehan J. The Т Manual. Computer Science Department, Yale University, N�w Haven, USA, 1984. Stoyan Н. Common Lisp - а Survey and а Cri t i ­ que. Rundbrief der FG К/ in der Gl, Nr. 28, 1982. Steele G. Lambda, t he U l t i mate Declarat ive. AI Memo 379, AI Laboratory, MIT, Cambridge, Мas­ sachusetts, 1976. Steele G. , Sussman J. Lambda, t he U l t i mate l m­ perative. Al Memo 353, МIТ AI Lab, 1976.

1 0 Зак 547

.

290

5 Развитие языка Лисn и Лисn-систем

27. Steele О. Fast Ari t hmet ic in MacLisp. Proceediпgs of the Масsута 1 977 User's Соп­ fеrепсе, 1977. 28. Steele G. An Overview of Common Lisp. Сопfе­ rепсе Record of the АСМ Syтposiuт оп Lisp апd Fuпctioпal Prograттiпg, Pittsburgh, Pennsyl­ vania, Aug. 15-18, 1982 (а). 29. Steele О. Соттоп Lisp Refereпce Мапиаl. SPICE Project Doc. s061 , Dept. of Computer Science, Carnegie-Mel lon University, 1982 (Ь). 30. Steele G. Сот т о п Lisp. The language. Digi tal Press, Hanover, Мassachusetts, 1984. 31. Sussman О. , Steele О. SCHEME: An Interpreter for Extended Lambda Calculus. Tech. Rep. 349, AI Laboratory, MIT, 1975. 32. Tei telman W. lпterlisp Refereпce Maпual. Xerox PARC, Palo Al to, Cal i fornia, 1978, 1983. 33. Tei telman W. , Мasi nter L The lnterl isp Program­ m i ng Environment. /ЕЕЕ Coтputer, April, 1981 . 34. Whi t e J. L Program i s Data - А Нistorical Per­ spect ive on МacLisp. Масsута User's Сопfеrеп­ се, Berkeley, Cal i fornia, 1977. 35 . Whi t e J. NIL - А Perspect ive. Macsyma User's Сопfеrепсе, Washiпgtoп D. C, 1979.

5.4 Лисп-машины

291

По к.ры вал о алтаря в одн о й эп охе - это к. о врик. для н ог в сл едующ е й . М.

Твен.

5.4 ЛИСD-МАUIИНЫ • • • • •

6е rство из систем разАе.nения времени

Пе рв ы е изrотовите.nи

Усп ехи Л исп-машин Л исп и.nи Пpo.nor? Литера тура

6еrство и з с и стем разАе.nения време н и С наступлением 70-х годов большие системы искус­ ствеиного интеллекта и алгебраические систем ы натолкнулись н а ограничения памяти и эффективности, существующие и на больших универсальных ЭВМ. Восемнадцатибитовое поле адреса широко используемых маш и н PDP-10/20 стало серьез­ ным ограничением, к тому же исследователи искусственного интеллекта не могл и работать в системе разделения времени в дневное время из-за большой нагрузки на машины. Из этих п роблем родилась идея об отдельной Лисп-машине и о маневре, который известен под названием "бегство из разделе­ ния времени" (escape from t i meshari ng). На это направ­ ление повлияло также и быстрое развитие м и кроэлек­ троники в 70-х годах, сделавшее возможным п роектиро­ вание и производство ориентированных на язык процессоров и переопальных ЭВМ. Первый отчет, связанный с Лисп-машинами, поя­ вился в серии изданий лаборатории искусственного и н­ теллекта МIТ в 1974 г. (GreenЫatt 1974), а интеграль­ ная схема LSI "Lisp оп а Chi р" была изготовлена в 1 978 г. (Steele, Sussman 1980). Первые промышленные Лисп­ машины появились на рынке несколько лет спустя. 1 0*

292

5

Развитие языка Лисп и Лисп-систем

Крупные фир.мы поддерживают развитие Лисп-культу­ ры делая существенные подарки университета.м и вуза.м. Технический университет приобщился " Лисп­ .машина.м, получив в подарок Лисп-.машину Explorer.

Часть идей, касающихся Лисn-машин, зародилась

в Исследовательском центре Palo Alto фирмы Xerox и

�ла результатом nионерских разработок в области обработки данных на nереопальных ЭВМ и экранно­ ориентированных человеко-машинных интерфейсов. Это были уже ранее уnом инавшиеся symbolics т... объектно-ориентированн ы й nодход, а также специал ьные интегрированные в среду средства и методы n рограммирования, созданные фирмами Xerox и BBN в ходе работы над системой Интерлисn.

Пе рвы е и з готовител и Производство Лисп-машин началось в США середине 80-х годов на трех n редn риятиях: LMI вLisp Mac h i ne l nc. ( LMI ), Symbo l i cs l nc. и Xerox. Первые две фирмы nрисходят из МIТ, и n роизводимые и м и машины исnол ьзуют nочти совместимые диалекты Зеталисnа. Маши н ы же фирмы Xerox п редставля ют направление



5. 4 Лисп-машины

293

Интерлиспа. Начиная с середин ы этого десятилетия Лисп-машины начала производить первая крупн ая фирма-изготовитель аппаратуры Texas I n s t ru­ XEROX meпt s (Explorer). В .Япон и и тоже создано несколько Лисп-машин ( Kurokawa 1979). Первый коммерческий п рототип Лисп-машины (Al pha фирмы Фудзицу) был объявлен в 1984 г. Усnехи Л исn-машин Целью проектирования Лисп-машин была разработка их в виде переовальных ЭВМ, которые можно было бы использовать не только для профессио­ · нальных исследовани й в области искус­ ственного и нтеллекта, но и для различ­ ных промышленных и коммерческих приложений. Разработке и их распространению помешала необходимость переноса программнаго обеспече­ ния большого объема из дорогой среды больших машин. По производительности оборудования Лисп-маши­ ны очень эффективны, кроме того, они имеют большой объем основной памяти. Их аппаратура спроектирована специально для вычислени й на Лиспе. С точки зрения эффективности одной из наиболее важных особеннос­ тей является проверка типов на уровне аппаратуры (tagged archi tect ure), испол ьзуемая в системах, п роис­ ходящих из МIТ. Однако наиболее существенны м и реимуществом такой аппаратуры я вляется возможность испол ьзова­ ния на Лисп-машине интегрированной п рограммной среды. В ней наряду с сами м Лиспом содержатся разнообразные программвые средства, которые мы уже рассматривали в связи с Зеталиспом и Интерлиспом. Программное обеспечение ис­ пользует тысячи функций. Во м ногих системах помимо Лиспа доступны и другие языки ( Пас­ каль, Ада, Фортран, Си, Пролог и др. ). Т.ак, в систему можно добавить реализованные ранее на других языках части или сделать традиционное п рограмм и рование более эффективным с помощью разнообразнейших средств, имеющихся на Лисп-- м ашине.

+S'РЕ�V

+

294

5 Развитие языка Лисп и Лисп-систем

)

Л и сп и л и Про.лоr? В апреле 1982 r. я понское Мин истерство внешней торговли и п ромыш.леииости MIТI п риступнnо к реализации 1 0-летней п рограм­ � м ы исследова н и й и создания ЭВМ, це.ль f � которой состои т в разработке ком пьютерной технологии и методов п рограмм и рования, н еобходим ы х д.ля и н те.л.лектуа.льных компьютеров 90-х годов (Moto-Oka 1 982, Fei genbaum и McCorduck 1 983, Si mons 1983). Компьютеры пятого поко.ления, подобно Лисп-машинам, поддерживают работу по разработке п рограмм искусственного интеллекта и его при.ложений как в части аппаратуры, так и п рограммаого обеспече­ ния. В качестве языка п рограммирования японцы испо.льзуют не Лисп, а расширенные логические языки на основе Про.лога. Как Лисп-ку.льтуре, так и Про.лог-ку.льтуре несом­ ненно есть что позаимствовать друг у друга. Предска­ зывают, что в Лиспе появятся средства .логического и п родукционного п рограммирования подобно тому, как раньше бы.ли заимствованы такие новые методы п рограммирования и форма.лиз­ мы, как объектно-ориентированное прог­ раммирование из языков Симу.ла и Смол­ то.лк. Соответственно и в .логическом программировании замечено, что в некоторых с.лучаях удобнее применять методы функциона.льного и п роцедурноrо 1СОТ программирования из Лиспа, чем чисто ••к " � �� - • дек.ларативную .логику. Поэтому в разраба­ - - ·- тываемые в настоящее время расширения Про.лога войдут многие .лисповские средс­ тва, например развитые типы данных, п роцедурные структуры управления и объекты.

Л и тература

1. Вawden А. , GreenЫatt R. , Holoway J. et al. Тhе Lisp Мachine Lisp. В кв. : Artlficial lntelllgence:

5.4 Лисп-машины

2. 3.

4.

An М/Т Perspective, Vol . 2 , МIТ Press, Cambrid­ ge, Мassachusetts, 1979. Burton R. , Kaplan R. , Мasi nter L et al. Papers on Interl isp-D. Xerox Palo Alto Research Center, Palo Alto, California, 1981 . Feigenbaum Е. А. , McCorduck Р. The Fifth Gene­ ration - Artificial lntelligence and Japan's Com­ puter Challenge to the World. Addison-Wesley, 1983. OreenЬlat t R. The Lisp Мachine. Worki ng Paper 79, AI LaЬoratory, МIТ, Cambridge, Мassachu­ setts, 197 4. 5. IСОТ: Out l i ne of Research and Develop­ ment Plans for Fifth Oenerat i on Соmputer Systems. lnst i t ute for New Oene­ ration Computers ( ICOT), Tokio, 1982. 6. Moto-Oka Т. (ed. ) Fif t h Oenerat i on Computer Systems: Proceedings of the lnternational Conference of Fifth Gene­ ration Computer Systems. Tokyo, Oct. 9-22, 1981 , North-Holland, 1982. Si mons О. Towards Fifth-Generation Computers. NCC Publicat ions, Мanchester, England, 1983. Steele О. , Sussman О. Design of а Lisp-based Mic­ roprocessor. САСМ. Vol. 23, No. 1 1 , . 1980. Sussman 0. , Holoway J. , Steele О. and Вel l А. SСНЕМЕ-79 - Lisp on а Chi p. IEEE Computer, July, 1981. Weinreb Р. , Moon D. Usp Machine Manual. AI Laboratory, MIT, Cambridge, Мassachusetts, 1978.

ш 7. 8. 9. 10.

295

296

5 Развитие языка Лисп и Лисп-систем

Приuючения талисяана разработчиков Зеталиспа. героя нью-йоркского теяного яира "Zippy t he Pinhead" в

среде Зеталиспа

fiiИПОЖЕНИЕ 1

Указатель содержит упорядоченвые в алфавитном порядке имена функций, симвопов и других системных имев l(оммов Лиспа содержащвхся во втором томе. Приведевы также и имена опредепяемых в примерах функций переменных и других пвсповских объектов и обозначений. Сводка всего l(оммов Лиспа приведена в припоженив 1 к первому тому. АНАЛИЗИР)'й, наша функция 194, 223 АНАЛИЗИРl'й·ПРАВИJIО, наша функция 223 В-ГJWБИНУ, наша функция 77 В-КОНЕЦ, наша функция 208 В-ШИРИНУ, наша функция 78 ВЕНЕРА, nеременная 234 ВОЗМОЖНЫЕ, наша функция 229 ВПЕРЕД, наша функция 212 ВТОРОй , наша функция 148 ВЫВЕДИ, наша функция 34 ВЫВЕДИ-ВЫРАЖЕНИЕ, наша функция 187 ВЫВЕДИ-ХВОСТ, наша функ­ ция 188 ВЫВЕДИ-ЭJII!.МЕ.НТЬI, наша функция 225 ВЫВОДЫ, наша функция 223 ВЫЧИСJIИ, наша функция 198 ВЫЧИСJIИ-Q'ММУ, наша функция 50 ГJIАСНАЯ?, наша функция 208 ДАРВИН, наша функция 227 ДI!.Дl'IUКA, отношение 91 ДЕй МОС, nеременная 234 ДI!.JIИ, наша функция 2f1l ДI!.JIИ-CJIOВO, наша функция 2f1l

ДИАМI!.ТР-СОJIНЦА, константа 234

ДИффЕРЕНЦИР)'й, наша фун­ кция 4З, 44 ДИФФЕРЕНЦИРl'й•, наша функция 45 ДИффЕРЕНЦИРl'й+, наша функция 45 ДИффЕРI!.НЦИРl'й-, наша фун­ кция 45 ДИффЕРЕНЦИРl'й1, наша функция 44 ДОБАВЬ, наша функция 60 ДОБАВЬ-ВЫВОДЫ, наша фун­ кция 225 ДОКАЖИ, наша функция 99, 228 ДОКАЖИ-КАЖдЬiй, наша функция 99 ДOJIГAJI-KOII?, наша функция 210 ДОJIГАJI-НАЧ?, наша функция

208

ДОJIГОТА-ГJIАСНОй , наша функция 209 ЗI!.МJUI, nеременная 234 ЗНАТОК-ЗВЕРЕй, наша функ­ ция 227 ЗНАЧЕНИЕ, наша функция 62, 88 ИМПЕдАНС. наша функция 51

298

Приложеине t

ИНТЕРПРЕТАТОР, наша функция t85 КОНЕЦ, переменная 76 КОРАБЛЬ, класс 118 КОРА&ЛЬ1 , переменная 118 КОРА&ЛЬ78, переменная 119 КОСМОС. переменная 235 КОСМОС-ОКНО, объект 234 КПJПОС. наша функция 5О КРИТЕРИй , наша функция 78 JIYНA, переменная 234

МАРС, переменная 234 МАРШРУI', наша функция 75 МАТЬ, отношение 93 МЕРКУРИЙ, переменная 234 МИКСИМА, наша функция 201

НАЗАД,

наша функция 212 НАИJWЧШИй, наша функция 78 НАЦЫГАНСКИй , наша функция 214 ила. класс 121

ОБРАЩЕНИЕ, наша функция 31 ОРБИТА-ЗЕМЛИ, константа 234 ОТЕЦ, отношение 92 ОЧИСЛО, наша функция 5О

ПАРАЛЛЕЛЬНО, наша функция 48, 51

ПЕРЕВЕДИ-ПРЕдJIОЖЕНИЕ. наша функция 213

ПЕРЕВЕДИ-СЛОВО, наша фун­ кция 209 ПЕРЕДНЕЕ, наша функция 211 ПЕРЕМЕИНЛЯ·Р, наша функция 89 ПЕРЕНОС. наша функция 33 ПЛАН, переменная 76 ПЛАНЕТА, класс 236 ПОДМНОЖЕСТВО, наша функ· ция 225 ПОИСК, наша функция 76 ПОМЕНЯй-ИМЕНА, наша фун­ кция 98

ПОМЕНЯй-ЧАСТИ, наша функ· ЦИЯ 211 ПОСЛЕДОВАТЕЛЬНО, наша функция 48, 49 ПРАВИЛО, структура 220 ПРЕдJIО)I(ЕИИЕ·И, наша фун­ кция 223 ПРЕОБРАЗУй , наша функция 195 ПРИМЕНИ, наша функция 198 ПРИМЕИИМЫ, наша функция 76 ПРИСОЕДИНИ, наша функция 222 ПРОВЕРЬ-НЕПРЯМО, наша функция 230 ПРОВЕРЬ-ПРАВИЛО, наша функция 224 пgоrРАММА , переменная 93 ПРОИЗВОДНАЯ, наша функция 44 ПРЯМО, наша функция 229 РЕКУРСИВНО, наша функция 229 РОДИТЕЛЬ, отношение 91, 92 СНЯТЬ-СКОБКИ, наша функция 201 СНЯТЬ-У-ОПЕРАТОРА, наша функция 201 СОГЛАСНАЯ?, наша функция 208 СОЕДИНИ, наша функция 212 СОЗВJЧИЕ. наша функция 211 СОЗДАй-СВЯЗИ, наша функ· ЦИЯ 179 СОЛНЕЧНАЯ-СИСТЕМА, наша функция 238 СОЛНЦЕ-Х, константа 234 СОЛНЦЕ-У, константа 234 СОПОСТАВЬ, наша функция 56 СОПОСТАВЫ, наша функция 59 ОIУI'НИК, класс 236 СТАРШЕ, наша функция 195 СХЕМА-1, переменная 48 ТЕЛО, класс 235

Указатель функций и симвопов

299

УДJIИНИ, наша функция 210 )'I(ОРОТИ, наша функция 210 )'ИНФИЦИРУй, наша функция

D, наш симвоп 200 DЕFДЕйСfВИЕ, макрос 199 DЕFПРОИЗВОДНАЯ, макрос 46 DEFCOПOCfAВHTEJIЪ, макрос

УСЛОВИЯ, наша функция 223

DEFFLAVOR, Зеталисп 117, 118,

ю

57

усrлнови, наша функция 184

ФОБОС. переменная 234

126

DEFMEТOD, Зеталисп 108, 119, 126

ХАНОйСКИЕ-БАШНИ, наша функция 33

ЧИТАй, наша функция 191 ЧИТАй-ВЫРАЖЕНИЕ, наша функция 187

ЧИТАй-ХВОСТ, наша функция 187

DEFSТRUCf, форма 110, 119 DEFUN, форма 27 DESCRIBE, встроенная функция 147 00, форма 28, 36, 134 DOCUМENТATION, встроенная функция 147 DWIМIFY, Интерлисп 161 ED, встроенная функция 142

AND, форма 135 ANSWER, наша функция 65 APPLY, встроенная функция 19,

EDIT, Интерлисп 156 ELIZA, наша функция 64

APPLY1, наша функция 178 APROPOS, встроенная функция

EQUAL, встроенная функция 55 ERROR, встроенная функция 145 EVAL, встроенная функция 19,

41, 45, 126

148

ВREAI(,

С,

41 встрое нная функция 144

наша функция 49

CASE, форма 36

САТСН.

EQ, встроенная функция 55 EQL, встроенная функция 55

форма 36

CERROR. встрое нная функция t45

CLISPIFY, Интерлисп 161 COМPILE, встроенная функция t46

GET, встроенная функция 110

функция 146

COND, форма 26, 36, 135 CONSP, предикат t34 COPY-USТ, встроенная функCOPY-Usтt, наша функция 29, COPY-LiSТ2, наша функция ция 30

00, форма 28

HELP-QUESТION, наша функция 65

ция

СОРУ-ТRЕЕ,

FIX. Интерлисп t55 FUNCALL. встроен ная функция 19, 41, 45, 110, 121, 126 FUNcriON, специальная форма t9

COМPILE-FILE, встроенная

30

EVAL-COND, наша функция 177 EVAL-ШHCOK, наша функция . 180 EVAL1, наша функция 176

30

встроенная функ­

IF, форма 28, 36 КPLUS, наша функция 150 L, наша функция 49

300

Припожение 1

LАМВDА1, наш символ 177 LET, форма 36, 134 �Р. Эетаписп 165

UNТRACE, встроенная функция 144

МAКE-INSTANCE, Эетаписп 118 МAКEFILES, Интерписп 153 МЕМВЕR, встроенная функция 55

NNC, встроенная функция 135 NОТ, встроенная функция 134 NULL, встроенная функция 134

OR, форма

135

Р?, наш симвоп 62 РР-ХВОСТ, наша функция 184

PPRINТ, встроенная функция 183 PPRINТt, наша функция 183 PROO. форма 28, 36, 135 PROLOG, наша функция 98

QUOТE, специапьная форма 19, 26 R, наша функция 49 REDO. И нтерписп 154 REМPROP, встроенная функция 110 REТURN, встроенная функция 28 REVERSE1, наша функция 146 RPLACA, псевдофункция 135

SEND, Зетаписп 120, 126 SE1ПF, присваиванне 110 SEТQ. присваиванне 28, 135 SТЕР, встроенная функция 144 SUBUS, встроенная функция 2 12 ТНRОW, форма 36

Т1МЕ. встроенная функция

150

ТRАСЕ, встроенная функция 143

UNDO, Интерписп 154

UNLESS, форма 36

WНEN, форма 36 *•

наш симвоп 46, 56, f!il, 60, 199 •HELP-QUESТIOНS., динами­ ческая переменная 64 .ОМЕGА•, динамическая пере­ менпая 49 •RUL�. динамическая пере­ мениая б5 •&АЗА-ЗНАНИй•, переменпая 224

•ГИПОТЕЗЫ•, переменная 226 •ДЕйСТВИЯ:•. переменпая 190 •ЗАПРОСЫ•, динамическая переменная 227 •ПЕРЕДНИЕ-ГЛАСНЫЕ•, перемеиная 211 •ПРАВИЛА•, переменпая 224 •ПРОДИ(ЦИИ•, переменпая 75 .,фАI(ТЫ•, динамическая переменпая 227 +, наш симвоп 46, 56, f!il, 60, 199 +>, наш симвоп 58, 60 -, наш симвоп 58, 199 /, наш симвоп 200 : , наш симвоп 200 :ВРАЩАйСЯ:, метод 236 : ВЫВОДЫ, попе структуры 220 : ИМЯ:, попе структуры 220 :СКОРОСТЬ. метод 120 :УСJЮВИЯ:, попе структуры 220 : AFТER, Зетапнсп 120 : BEFORE. Эетаписп 120 : GEТТAВLE-INSTANCE-VARIAВLES. Эетапнсп 119 : SET-x. Эетаписп 119 : SEТТAВLE-INSТANCE-VARI­ AВLES. Зетаписп 119 ,

наш снмвоп 62 наш снuвоп 58, 60

?, наш снмвоп 56, f!il, 60 ?>, наш симвоп 58, 60

УКАЗАТЕЛЬ ИМЕН И

СОКРАI.ЦЕНИА

В этом приложении собраны встречающиеся в тексте имена и сокращения. Одновременно оно может служить указателем авторов по перечиям литературы. С его по­ мощью можно найти литературу, которая вследствие разбиения по темам приведена в разных разделах. Символы и зарезервированные слова Коммои Лиспа образуют отдельный указатель (приложение 1 ). Ада 42,

125, 287 АлгОJI 36, 251, 245, 260 АлГОJI 68 42 Аналитик 189 Арнетотель 151 Атлас 251

Бальзак О. 138 Бейсик 19 Боброу д 66, 67' 125, 126, 248,

288

БраАль 252 БЭСМ-6 254

ВаАзеибаум Дж. 66, 68 Великобритания 250 Венгрия 256 ВЦ АН СССР 254 ГДР 255 Гете И. 203 Гладстон У. 174 Дартмут 244 Декарт 82 Диктункус Э. 164 Ершов А.П. 136 ЕС 254, 255 Зеталисп 9, 106, 125, 165, 282 Интерлнсп 9, 125, 151, 251, 253,

259, 274

Капевала 11 Канада 258 КарлеАль Т. 233 Китай 257 Клокени У. 103 КНР 257 Кнут Д. 38, 136, 288 Коммои Лисп 7, 126, 134, 277,

284

Лавров С.С. 267 Лейбниц Г. 272 Ленат Д 24, 81 Лннчепннг 258, 259 Лихтекберг Г. 82 Логик-теоретик 244 Лукасевнч Л. 196 Маккарти Дж. 180, 188, 243,

248-250

Маклисп 125, 273 Мексика 258 Мепп н ш 1(. 103 Минский М. 125, 127, 244 Мнцубнси 256 мэи 254 Неймаи Дж. 244 Ннльсон Н. 24, 74, 81 Ньюэпп А. 244, 249 Паскаль 19, 264 ПРОJIОГ 102, 257, 260, 294

302

Приложеине 2

РаАт Ф. 217 Рафазп В. 66, fi1 Робинсон Дж. 94, 104 Роботрои 255 Румыния 256 Рунеберг й. 14

Саймон Г. 244 Си 251, 279

Силаrадзе Г. 267 Си мула 123, 294 Смолтолк 19, 23, 124, 276, 294 Сок рат 105 СССР 254 Сте нфорд 244 США 248, 272 Тампере 260 Твен М. 291 Тосиба 256

УаАтхед А. 105 Умео 258 Уо рре н Д 102, 104 Уо р ре н Р. 250 Уотермаи Д. 24, 81 Уппсапа 258, 260 Фортран 19, 36, 245 Фортраи 77 42 Франция 251

ФРГ 253 Ф удэ иuу 256, 257, 259, 293 Харрис С. 5 Хейее-Рот Ф. 24, 81 Хельсинки 261 Хитати 256

Хзмминr Р. 128 Чехасловакия 255 Шеинон К. 244

Шопенгауэр А. 26 Шоу в. 40, 243 Шоу Дж. 244

10фа

в. 267

Япония 256

АЬеlsоп Н. 288 Abrahams Р. 249 ACOS System 800 256 Adams N. 289 AIМDS 18 ALICE 17 Allen J. 188 Alpha 257, 293 ALPS/1 257 Alto 276 Apollo 278 Arpa 284 АRТ 17

86700 260

Вackus J. 38 Вarlund О. 270 Вarr А. 24, 80 Вarron D. W. 38 Вates )t. 288 Вates М. 163 Вawden А. 295 ВВС Lisp 251 BBN 151, 259, 274 BBN-Lisp 259, 274, 275 ВСРL 251 Веl Мае 32 252 Вell System 244, 279 Вell А. 295 Вerkeley E. G. 248 Вetz D. 264 Bishop Р. 127

Вobrow D. 66, 67, 125, 126, 248, 288 Вobrow J. 202 Вobrow R. 163 Вolce J. 269 Вolt, Вeranek and Newman lnc. 274 Вonar J. 289 Bramer D. 103 Bramer М. 103 Bro oks R. 136, 288 Buchanan В. 80 Bundy А. 67 Burroughs 6700 258, 277

Указател ь и мен и сокра щен и й

Burstall R. 251, 264 Burton R. 295 Busse J. 267 СА Е 510 251 Caltech 244 Campbel l J.A. 103 Campbel l L. 204, 215 Саnпоп H. l. 126 Carlsson М. 103 Cattel G. 265 сос ззоо 277 -

СОС З600 258 СОС 6600 254

Chai l loux J. 265 Charniak Е. 53, 232 Christaller М. 127 Church А. 246, 248 Q i ppi nger J. 289 Clocksi n W. 103 Cohen J. 265 Cohen Р. 24, 80 Cointe Р. 265 Colby к. 66, 61 Collins J. 264 Colmerauer А. Ю2, 103 Comlisp 264 Commodor 64 264 Communications of АСМ 248 CONNIVER 17, 80 Cooper R.A. 269 Coral 256 CPL 251 Cray 278 crss 273 Dahl 0.-J. 123, 126 Dandelion 276 D.ARPA 282 Datalogi 259 Davis R. 80 DEC 275 DEC- Ю 102, 259 DEC-10/20 137, 138, 275, 277, 278 DEC-20 259, 262, 263 DECsystem-20 152 Devi n М. 265

Di ffie W. 289

303

Digi tal Eq uipment Corporation 247, 273 Digital 'Equipment Corporation Оу 13 Dijkstra Е. W. 35, 38 d' lnverno R. 265 di Pri mio М. 127 DMLisp 256 DoD 286 Dolphin 276 Dorado 276 DPS7 252 Duda R. 80 Dyer D. 288 Dynabook 276 Edwards D. 249 Eisenstadt М. 104, 232 ELIZA 64 ЕМАСS 164 Emanuelsson Р. 67 EМYCIN 80 Entity Systems 264 Ерр В. 163, 266 Erl ing О. 270 ES-Lisp 264 Expert 80 Exploper 263, 293 EXТEND 125 F1 Lisp 259

F2 Lisp 259 F3 Lisp 259 Facom 230 256 Fateman R.J. 288

Feigenbaum Е. 24, 80, 288, 295 FGCS 2fil FLAТS 2fil Flavor(s) 8, 23, 106, 113, 114, 117, 125, 165, 233, 280 Floyd R. W. 38 Foderaro J. 288 FOL 17 Foster J. 251, 264 Fox L. 251, 265 Franz Lisp 278, 279 Friedrich Н. 267 FRL 18 Fujitsu М2ОО 277

ЗО4

Приложеине 2

Gabriel R. 288 GE 634 273 GE 600 273 Gesel lshaft fuer Мat heтati k u n d DatenverarЬeitung 253 Geske U. 267 Gevarter W. 81 GМD 253 Goerz G. 53 Goldberg А. 124, 126, 288 Gotden Соттоn Lisp 286 Goodwi n J. 163 Gorz G. 68, 266, 267 Goto Е. 268 Gott lund 1(. 204, 215 GreenЬiatt R. 295 Greussay Р. 266 Griss С: 289 Griss М. 289 Gunterтann R. 267 Guzтan А. 269 Н1644 260 Н8О 256 Натаnn С.-М. 267 Haratdsson А. 163 Hardebeck Е. 266 Harms T.R. 215 Hayes-Roth F. 24, 81 Hayes-Roth Р. 81 Heam А. 189, 202, 288 Heicki ng W. 267 Heino А. 270 Henderson Р. 38, 188, 288 Hess 1(. 267 Hewi tt С. 127 Hewlett Packard 278 Hitac-5020 256

HLisp 256 Holoway J. 295 Honeywell 256 Hom В. 202, 218, 232 НР9000 278 Husberg N. 202 HutLisp 263 Hyvonen Е. 24, 81, 171, 232, 241, 270

1100 256

·� 245, 247, 278 IВМ ЗОХХ 252 1� 360 247 ·� 370 247, 254, 277 I ВМ/370 259 IBM 704 245, 247 1� 709 258 1� 7090 247, 251, 253, 258 1 � 7094 273 1� РС/ХТ/АТ 264 ICL 1905 251 ICL 4 251, 254, 277 IJCAI-75 255 lтperial Col lege 251 lncoтpatiЫe Timeshari ng Systeт 273 lnga lls D.Н. 124, 127 lngerman P.Z. 38 lnria 251, 252 lnsti tut de Recherche et Coordi­ nation Acoustique/Мusique 252 lnstitut fuer Deutsche Sprache 253 lnte1 8088/8086 252 lnterl isp 9, 125, 151, 251, 253, 259, 274 lnterlisp Coтpatibi lity Package 134

lnterlisp-10 152 lnterlisp 360/370 259 lnterl isp-D 152, 153, 163, 276 IPL 244, 245 IRCAМ 252 IТS 273 Jaakkola Н. 103 Jenki ns R. 250, 265 Johnniac 244 Juslenius D. 215 Kah n 1(. 103, 269 l(anoui Н. 103 l(aplan R. 295 l(arjalainen М. 270 l(arttunen F. 215 Кarttunen L. 104 l(arvi nen J. 270

,

Указатель имен и сокращений

KAS 17 80 А. 124, 12б М. 104 Kern ighan В. W. 38 Kerns R. 125, 127 Кi rmijian 266 KL-ONE/ТWO 18 Кnowledge Engi neeri ng Ку 13 Kn uth D. 38, 136, 288 Knuutt i la S. 204, 21б Koch D. 2б7 Kolar J. 2б7 Kolb D. 267 Koomen J. 288 Kowalski R. 102, 104 Krause D. 2б7 КRL 18 Kul i kowski С. 81 Kurokawa Т. 268

Кау Кау

Laaja А. 271 LAP 274 Lassi la О. 270 Laubsch J. 2б7 LeLisp 252 Lenat D. 24, 81 Levi tan S. 289 Licht man Z. L. 180, 188 Lisa 252 Lisp Мach i ne lnc. ( LMI) 282, 292 Lisp Мac h i ne Lisp 282 Lisp on а Ch i p 291 L i sp Contest 256 L isp/P 256 Lisp/360 258 L isp-3000 257 L isp-130 257 Lisp 1 247, 248, 273 L i sp 1.5 248, 251, 255-257, 273, 282 Lisp 1.6 277 Lisp Bul let i n 253 . L ispiO t 263 List Assemb l y Program 274 LMI-Prolog 260 LMI 137, 163, 165, 260 Loops 113, 117, 125 LOOPS 277

305

LSI 291

М. 1 17 Мб8ООО 252 Мб809 264 МАС 189, 272 МacLennan В.J. 127 МacLisp 125, 273 Мac h i n e Aided Cogni tion 272 Мaci ntosh 252 Мacsyma 9, 189 Мagi d i n М. 269 Мakila К. 269

Мalmi L. 271 Мantyla A.-L. 204, 216 Мarti J. 289 Мasi nter L. 163, 232, 295 МcCarthy J. 180, 188, 248-250 Мc Co rduc k Р. 288, 295 МcDermott D. 53, 81, 232 МcDermott J. 81 МcDonald D. 289 Мclntosh Н. 269 Мeehan J. 289 Мelcom Cosmo 700 256 Мelenk Н. 267 Мel l ish С. 103 Мichie D. 104

Мi kko 2 264 Mi kko З 264 Mi kko Lisp 264 Mi n i б 252 Minsky М. 125, 127 МIТ б, 9, 137, 151, 164, 244, 245, 247, 248, 2б2, 272, 273, 279, 291, 292 MIТI 294 Мооn А. 125, 127 Мооn D. 127, 171, 233, 240, 289, 295 Мооrе J.S. 289 Moses J. 202 Мoto-Oka Т. 295 МRS 17 MuМath/MuSi m p 189 Mue l ler К. 267 Mul t i cs 273 Mu l t i ple Access Computer 272 Myh rhaug В. 12б

306

Приложеине 2

Nakanishi М. 268 Nasr R. 104 N EC 256 NEUCC 258 Neumann J. von 244 New l m plementation of Lisp

280

Newe l l А. 244, 249 Nguyen H. D. 265 N I L 278, 280 Ni lsson N. 24, 74, 81 N IТEC б

NK3 257

Nokia б, 13, 263, 264 Nokia lnformaati ojarjestel mat

264

Noko Т. 271 Nordstrom М. 269 Norman А. 265 Norman Е. 289 Norsk Data 252 NS16000 252 Nygaard К. 12б O' Shea Т. 104, 232 Odra 1304 255 Odra 1204 254, 255 Ojansuu Н. 204, 215 O l i sp 256 OPS 80 OPSS 17 OWL 18

PARRY 66 Pasero R. 103

PDP-1 247 PDP-10 152, 2б2, 273-275, 278 PDP-10/20 275, 291 РDР-б 273 Pearl J. 24, 74, 81 Perei ra F. 104 Perei ra L. 104 Pie t i kai nen Р. 271 PILS 259 Pirinen Р. 270 Pitman К.М. 289 PLANNER 17, 80 Plauger P.J. 38

PLisp 263

Рое М. 104

РОР-2 251

POPLOG 251 PortaЬ ie Lisp 263 PortaЬie Standard Lisp (PSL)

263, 278

Potari F. 2б7 Potter J. 104 PR1ME 252 Prosessori б PSL 278 PULCE 257

Q-32 258

QA2/3 17 Quam L. 289 Que i n nec С. 266 Rand Corporation 244 Rank Xerox 13 Raphael В. 66, б7 Raulefs Р. б7 Reduce 189, 278 Rees J. 289 Ribbens D. 266 Ri chie G. 232 Ri esbeck С. 53, 232 Robl nson J. 94, 104 Robson D. 124, 126, 288 Rodet Х. 265 Roh l J.S. 38 Roi tzsch R. 2б7 ROSIE 17, 80 Roussel Р. 102-104 Roy J.-P. 266 Royal Radar Estab l i shment 250 Rozsa Р. 2б7 Ruohola Т. 271 Russel S. 174

S. 1 17 SAC 189

Sakurai Т. 104 Sammet J. 249 Sandewa l l Е. 163, 269 Sato М. 104

Schatz W. 2б7 Scheme 281, 282

Указатель имен и сокращеннА

307

Scientific Data Systems 275 Scratchpad 189 SDC 274 SDS-930 275 Segovia R. 269 Sel 32 252 Seppanen J. 163, 171, 188, 190,

Syrjanen М. 171, 241, 270 SYSLisp 278 System Development Corporati­ on 274 SZAMКI 256 SZfAКI 256

Shannon С. 244 Shapiro S. 232 Shaw J. 244 Shieber S. 104 Shortliffe Е.Н. 81 Shrobe Н. 232 Sibert Е. 104 Siemens 253 Siemens 305 259 Siemens 4004 259, 277 Sii lasmaa R. 271 Simon G. 244 Si mons G. 295 Si mula 123, 294 SIR 66 Slinn J. 104 Smalltalk 19, 23, 124, 276, 294 Smp 189 Sotirescu D. 268 Sperry 137 Spice Lisp 284 SRI 274 Stal lman R.M. 171 Standard Lisp 254, 278 Stanford Research lnstitute 275 Stanford Lisp 1.6 255 Stanford Lisp/360 277 Star 276 Steele G. 126, 289, 290, 295 Stefan G. 268 Stefanescu М. 268 Stefik М. 125, 126, 288 Steiger R. 127 SТеР-84 262 Stoyan Н. 53, 68, 174, 188, 249,

т 281

202, 205, 216, 241, 270, 271

250, 267, 268, 289

SТUDENТ 66 Sussman G. 81, 288, 290, 295 Sussman J. 289 Symbolics 137, 163, 165, 233, 263, 282, 292

T-Lisp 278

Takeuchi 1. 268 Tam m i ne n М. 270 Tapola Р. 241, 271 Tei telman W. 125, 127, 161, 163, 290

Telemechanique 1600 251 ТЕNЕХ 275 Tenex 152 Tesla 255 Texas lnstruments 13, 263, 293 Thompson Н. 232 Tl 137, 163, 165

тю 256 ткк 261

ТLC-Lisp 253

ТОРS 152 TOPS-10 275 ТОРS.10/20 273 ТОРS-20 275

ТоsЬас-3400 256

Towers of Нanoi 31 ТR4 253 True Lisp 281 ·

UCI L is p 277 Unisys 137

UNIТS 18

Цnivac 1108 261, 262 Universi ty of California 277

UNIX 263, 279

Urmi J. 270 Ustav technickej kyЬemeti ky 255

-

UТ Li sp 254 VАХ 263, 277 , 279 VAX Lisp 286

VAX/UNIX 278 VAX/VМS 279 VAX-11 252

308

П р иложемне 2

VАХ 780/11 279 Videoton R10 256 Vi rtanen L. 204, 216 VLisp 252

Wi nston Р. 202, 218, 232 WISP 257 Woods W.A. 53 Woodward Р. 250, 265

Wagreich В. 163 Waite W. М. 39 Wal i gorski S. 268 Warren D. 102, 104 Waterman D. 24, 81 Wei nreb D. 125, 127, 171, 233,

Xerox 137, 163, 259, 262, 274,

240

Wei nreb Р. 295 Weiss S. 81 Weizenbaum J. 66, 68 Wertz Н. 266 Whi te J. 290 Wicat 278

275, 287, 292

Xerox PARC 151, 292 Xerox Learni ng Group 276 Xi nsong J. 269 XLG 276 XLisp 251 Zel man Н. 268 Zetalisp 9, 106, 125, 165, 282 ZIO-Lisp 255 Zmacs 168

Указатель составлен из встречающихся в тгксте понятий и терминов, а также из специальных терминов языка Лисп. Имена и . сокращения собраны в свой указатель ( приложение 2) также, как символы Ком мои Лиспа и имена, определяемые в примерах программиро­ вания (приложение 1). Адаmируемость (adaptability)

131

Анализатор (parser) 70 - программ (Мasterscope) 158 Аро мат (flavor) 111 - ванилиновый (vaпi l la flavor) 117 Аргумент отношения 84 Ассистент (programmer' s assis­ taпt) 141, 154 База данных (database) 70 - знаний (knowledge base) 218 Башни Ханойские (Towers of

Hanoi) 31

Вывод логический (inference) 20 Выдача информации об ошибоч­ ных ситуациях (error signal­ i ng) 146 Грамматика (grammar) 67 Данные из предметной области (domain knowledge) 218

Действие (performance, function, process, action) 16, 70 - универсальное (generic) 41 Демон (daemon) 53 Дерево разбора (parse tree) 67 Дисплей с бнтовой картой (Ьi tmap) 166 Докаэательство .корректностн

(provi ng) 129

Дуга (агс, edge) 71

Зацись и нфи ксная (infix) 196 - обратная польская ( reverse

Po\ish) 193

- польская (Polish form) 196 - постфиксная (postfix, suffix) 196 - префиксная (prefi x) 196 Знан ия (knowledge) 14

Идентификация (identification, recognition) 20 Иерархия понятнА (conceptual hierarchy) 17 Инженер знаний (knowledge engineer) 218 Инспектор (i nspector) 141 Интерпретатор продукций (rule JПterpreter) 70 Интерфейс (i nterface) 133 Исполнение пошаговое (step­ pi ng) 140 История (history list) 141, 154 Исчисление предикатов первого порядка (first order predicate calculus) 89 Класс (class) 18, 106, Ю7 - базовый (base class, base flavor) 112, 117 - естественный 112 - классов (class c lass) 117 - объектов (object c lass) 107, 117 - свойств 112

310

Приложеине 3

- характеристический (mi xing flavor) 112 l(омментарий (comment) 150 l(онтекст сопоставления (con­ text) 63 l(орректность (correctness) 129 Корректор ошибок 141

Надежность {reliaЬi lity) 129 Надкласс (superclass) 111

Jlинrвистика компькперная (computational li nguistics)

- символьная и алгебраическая (symbolic and algebraic com­ puting, SAq 189 Образ (pattem) 54 Образец (pattem, template) 54 - предикатвый 62 Объект (object) 16, 17 -, вызов (object call) 107 -, опредепение (object defini tion) 107 -; свойства (attribute) 108 -, состояние (state) 108 -, экземпляр (instance) 107, 118 Оператор (operator) 20 Оrпаживаемость (debuggability)

203

Лисп чистый (pure Lisp) 27 Логика (logic) 1 - хорновских пред.nожеиий (Hom clause logic) 89 Макропроrраммироваиие (macro programming) 37 Машина вывода (inference engine) 70, 218 Метазнания (meta-knowledge) 16, 79

Метакласс (metaclass) 107, 117 Метаоб'Ьект 107 Метафора (metaphora) 23 Метод (method) 108 -, комбинация (comЬination) 114 - оnераторного предwествования (operator precedence) 192 - резолюций (resolution) 94 Метод-демон (daemon method) 115 Механизм возвратов по зависи­ мостям (dependency di rec­ ted/relevant Ьacktracking) 72 - - хронологический (chronolo­ gical backtracki ng) 72 - наследования (inheri tance mechanism) 112 Модепь абстрактная (aЬstract model) 37 - объектная (object model) 125 - программирования (model) 22 - с акторами (actorз) 125 Модуль (module) 35 Мышь (mouse) 166 -, выбор (click) 166 -, кнопка (button) 166

Обмен сообщениями (message passing) 108 Обработка естествеиного языка (natural language processing) 203

131

Отношение (relation) 84 Оrправнтепь (sender) 125 Ошибка серьезная (fatal error) 146

Парадигма программирования (paradigm) 22 Перебор полный (exhausti­ ve/bl i nd search) 71 Переменная образца 58 - общая (shared i nstance variaь­ le) 115 - экземпляра (i nstance variaь­ les) 108 Переносимость (portaЬility) 37, 131 Печать структурная (prettyprint) 155 , 183 Подкласс (suЬclass) 111 Подмастерье (apprentice) 141 Подставовка (substitution) 86 Поиск (search) 20 - в глубину (depth-firзt) 73, 77, 114

- - ширину (breadth-fi rзt) 73, 77

Предметный указатель - двунаправ.пенный (Ьi-di recti­

oпal search) 73 - обратный (backward chai пiпg, goal driveп search) 73, 226 - по наилучшему варианту (best-first) 74, 77 - - уровням (level first) 114 - прямой (forward chaini ng, data driven search) 73 Полезность (validity) 130 Порядок выполнения (preceden­

ce) 191

- обхода дерева (walk order) 196 - - - обратный (postorder) 114,

196

- - - промежуточный (inorder) 196

- - - прямой (preorder) 114, 196 Постдемон (after-daemon) 116 Пояснения (documentation) 147 Правила порождающие (pro-

duction rule) 70

- трансформации (transformati-

on) 70

- резолюции (resolution rule) 95 Преддемон (before-daemon) 116 Предложение хориовекое (Horn clause) 90 - -, заключение (head, consequ­ ence) 90 - -, предикат 90 - -, тело или nредуеловне (body, precondi tion) 90 Представпение знаний (knowled­

311

- продукционное (rule based

programmi ng) 55

- процедурное (procedural prog­

rammi ng) 28

-. структурное (structured prog­ rammi ng) 35 - управ.пяемое данными (data

driven programmi ng) 40

- - событиями (event/action

driven) 52

Продукция (rule) 69 -, nрименевне (apply) 70 Проектнрование сверху вниз (top down) 35 - снизу вверх (bottom up) 35 Прозрачность (transparent) 133 Пространство поиска (search

space) 20

Протокол (protocol) 133 Процессор (proceзsor) 37 Раскрутка (bootstrapping) 37 Распознавание образов (pattem recognition) 54 - - структурное (structural pat-

tem recognition) 67

Распознаватель (recognizer) 70 Редактор (edi tor) 139, 142, 154 - структурный (structure edi tor)



Резольвента (reзolvent) 95 Рекурсия концеваи (tai l recur-

sion) 140

ge representation) 16, 245

Решение (solution) 20, 71 Роль (role) 124

rative programming) 28

Свойство (property, attribute) 16 Семантика процедурнаи 83 Сеть классификацио н наи (discri­ mination net) 52 - локальная (local area network)

Прерывание (break) 140, 156 Принцип пошаrовоrо уточнении (stepwise refinement) 35 Программирование императив­ ное или оnератарное (i mpe­ - логическое (logic program­

ming) 55, 84, 101 - модульное (modular program­ ming) 35

- объектно-ориентированное или объе ктное (object orien­

ted programmi ng, object pro­ gramming) 19, 106

170

- перехода состояний (transition

network) 52

- семантическая (semantic net) 18 Симвоп-заменитепь 55

Система DWIM (Do What 1 Меаn (not what 1 type)) 159

312

Припажеине 3

- загружае м ая ( loadaЫe) 139 - продукционная (productioп

system, rule based system) 17 - разделения вре м ени ( t i me shari пg) 273 - резидентная (resideпt) 139, 157 - с рабочи м оос:тояиием (work-

Упрятывание информации ( i n­ formation hidi ng) 35 Уровни nо��Ические (levels of aЬ­ stract machi ne) 35 Условие (aпtecedeпt, cond i t ion)

69

space) 157

Факт (fact) 91 Форточка (рапе) 167 Фрейм (frame) 17

kпowledge based system) 217

Цепь (goal) 97

t i пg) 231

Wпюз (gateway) 170

sioп) 69

Эвристика сокращающая

- справочная (оп- l i пе documeп­ tatioп) 141 - экспертная (expert system, - - консультирующая (coпsul­

Следствие (coпsequeпt, coпc l uСобытие (eveпt) 16 Сообщение (message) 109 Сопоставпеиие с образцо м (pat tern matchi пg) 54

(pruni ng) 79

Эле м ент растра (pi xel) 169 Эффективность (effici ency) 130

Сопровождае м ость (mai пtai пaЬ­ i l i t y) 131 Состояине (state) 20 - базы данных (si t uat ioп, st ate)

jlзык A1N (augmented transi tion network grammar) 52 - встроенный (embedded) 47 - декларативный (declarative

- закпючитепьиое ипи цепевое

- древовидный (tree language) 67 - контекстио-независимый

70

(goal) 20

- иачапьиое ( i п i t i al state) 20 Сравнение (com parisoп) 20 Средства разработки (developmeпt tools) 167 Текст поясияющий (documeп­ tatioп stri пg) 147 Теория представпения (represeпtation t heory) 245 Терм 87 Тестируемость (testabllity) 130 Точка зрения (view) 124 Травспятор (compi ler) 140, 147, 158

Трассировщик (trace) 140, 157 Удобочитаемость (readab i l i ty) 130

Узеп (node) 71 Унификатор наиболее общий (most general _unifier) 86 Унификация (unification) 84, 85

language) 83

(context free) 192

- процедуриый (procedural lan­ guage) 83

- сетевой (graph language) 67

orJIAВJIEНИE

ВВЕДЕНИЕ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Скачок в развитии вычислител ьной техники . . . . Лисп - основа искусстве нного интеппе кта . . . . . . Учебник Лиспа на финском языке . . . . . . . . . . . . Язык Лисп и фуикциоиапьное программироваиие Методы программироваиия . . . . . . . . . . . . . . . . . Среда программирования . . . . . . . . . . . . . . . . . . Примеры программ . . . . . . . . . . . . . . . . . . . . . . . Развитие Лисп-культуры и Лисп-систем . . . . . . . На кого расчитана кинга . . . . . . . . . . . . . . . . . . . Терминология . . . . . . . . . . . . . . . . . . . . . . . . . . . Иконология . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

5 5 6 6 6 7

. . . . . . . .

9 9

. . . . . . . .

10 10

. . . .

13

. . . . . . . . . . . . . . . . . . . . . . . .

14 15

. . . . .. . . . . . .

16

. . . . . . . . . . . .

20

. . . .

. . . .

21 21 22 24

2 МЕТОДЬI ПРОГРАММИРОВАНИЯ . . . . . . . . . . . . . . . . . . . .

25

1 ВВЕДЕНИЕ В МЕТОДЬI И СИСТЕМЬI ПРОГРАММИРОВАНИЯ . . . . . . . . . . . . . . . Основные типы знаний . . . . . . . . . . . . Методы представления знаний . . . . . . Процедурные и декларативные знания Способы решения проблем . . . . . . . . . Лисп предпагает различные модели . . Методы и стиль программировання . . . Парадигмы программироваиия . . . . . . Литература . . . . . . . . . . . . . . . . . . . . .

. . . . . . . .

. . . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

2.1 ОПЕРАТОРНОЕ ПРОГРАММИРОВАНИЕ . . . . . Функциональное программирование . . . . . . . . Операторное и процедурное программироваJ!ие Рекурсия или итерация . . Рекурсивное операторкое программирование . Фразовое программирование . . . . . . . . . . . . . . Макропрограммирование . . . . . . . . . . . . . . . . . Литература . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . . . .

2.2 ПРОГРАММИРОВАНИЕ, УПРАВЛЯЕМОЕ ДАННЬIМИ Принцип программирования, управляемого данными . Универсальное программирование . . . . . . . . . . . . . . . . Дифференцирование выражений . . . . . . . . . . . . . . . . . Язык представления электрических схем . . . . . . . . . . . Другие методы программирования, управляемого данными . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Программирование, управляемое событиями . . . . . . . . Литере.тура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

40 40 41 42 47

.

.

.

.

.

.

.

.

.

.

.

.

.



.

. . . . . . .

26

26 27 28 31 35 37 38

.

. . . . . . .

18

. . . . . . .

.

. . . . . . . . . . . . . . . . . . .

10 11

2.3 СОПОСТАВЛЕНИЕ С ОБРАЗЦОМ . . . . . . . . . . . . . . . . . Сопоставление с образцом и распознавание образов . .

51

52

53

54 54

314

Огпавпение Распознавание списочных образов . . . . . . . . . . . . . Условия сопоставимости . . . . . . . . . . . . . . . . . . . . . Испопьзование переменных в образце . . . . . . . Сопоставпение с переменной образца . . . . . . . . . . . Предикатвый образец ограничивает сопоставимость Компьютерный психиатр ELIZA . . . . . . . . . . . . . . . . Распознавание структур . . . . . . . . . . . . . . . . . . . . . Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. •

.

. . . .

55 55

. . 58

. . . . .

.

.

61

62

. . .

63 66 61

2.4 ПРОДУКЦИОННОЕ ПРОГРАММИРОВАНИЕ . . . . . . . . Продукция - условие + следствие . . . . . . . . . . . . . . . . Интерпретатор продукций применяет продукции . . . . . Попвый перебор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Аннулирование выбора . . . . . . . . . . . . . . . . . . . . . . . . Наоравпение поиска . . . . . . . . . . . . . . . . . . . . . . . . . . Порядок перебора альтернатив . . . . . . . . . . . . . . . . . . Программирование методов поиска . . . . . . . . . . . . . . . Поиск в глубину, в ширину и по наилучшему варианту Применении продукционного программирования . . . . . Лите р атура . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

69

2.5 ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ . . . . . . . . . . . Декларативная программа не содержит алгоритма . . Процедурная семантика . . . . . . . . . . . . . . . . . . . . . . . Отношение является обобщением функции . . . . . . . . Унификация структур . . . . . . . . . . . . . . . . . . . . . . . . Алгоритм унификации . . . . . . . . . . . . . . . . . . . . . . . . Логика хориовских предложений . . . . . . . . . . . . . . . Логическая интерпретация хорновских предложений Логическое определение отношений . . . . . . . . . . . . . Множество предложений трактуется как программа . Метод резолюций . . . . . . . . . . . . . . . . . . . . . . . . . . . Алгоритм доказательства . . . . . . . . . . . . . . . . . . . . . . Реализация интерпретатора . . . . . . . . . . . . . . . . . . . . Пропог использует поиск в глубину . . . . . . . . . . . . . Развитие лоrическоrо программирования . . . . . . . . . Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

.

.

2.6 ОБЪЕКТНОЕ ПРОГРАММИРОВАНИЕ . . . . Объектное мышление и объектное программирование . . . . . . . . . . . . . . . . Объект, класс объектов и метакласс . . . . . Объект содержит данные и действия . . . . . . Свойства и состояние объекта . . . . . . . . . . . Действия или методы объекта . . . . . . . . . . Сообщения управляют вычислением . . . . . . Подкласс и надкласс . . . . . . . . . . . . . . . . . . Естественный класс и качественный класс Иерархия классов и механизм наследования .

.

.

.

.

.

.

69 70 71

12

72 73 74 11

79 80

. 82 . . .

.

83 83 G4

85

. 81

. 89 . 90 . 91 . 93 . 94

. 96 . 97 . 100 . 101 . 103

. . . . . . . . 105 . . . . . . . . . . . . . . . . .

.

. .

. . . . . . .

. . . . . . . . . . . . . . . . .

.

.

.

. . . . . . .

.

. . . . . . . .

. . . . . . . . .

1D6

107 107 108 108 109 111 111 112

Оглавление

315 о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о о

Порядок наследования в иерархии классов Композиция методов в вычислениях Базовые классы и метаклассы системы Пример системы Flavors DEPPLAVO� определяет класс МAKE-INSTANCE создает новый объект DEP МЕТНОD определяет метод SEN D посылает сообщение Объекты моделируют мир проблемы Применимасть об-ьектноrо программирования Развитие об-ьектноrо мышления и проrраммирования Литература -

о

о

о

о



о

о

о

о

о

о

о

о

о

о

о

207 ДОСГОИНСГВА И КАЧЕСГВО .

о

о

о

о

о



о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о



о





о

о

о

о

о



о













о

о

о

о



о

о

о

о

.

о

о

о

о

о

.

о

о

о

о

о

о

о

о

о

о

о

о



о

о

о

о

о

о

о

о

о

о



о

о

о

о

о



о

о

о

о

о

о

о

.

о

о

о

о





о

о

о

о

о

о

о

.

.

о

о

о

о



о

о

о

о

о

о

о

о



о

о

о

о



о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

ПРОГРАММИРОВАНИЯ Факторы качества и подход�>� к проrраммированию Разделяй и именуй объекты естественным образом Исnользуй хорошо определенные соединения Переносимость и стаНдартизация Другие советы Литература .

.

о о

о

о

о

о

о

о



о

о

о

о

о

о

о

о

о

о

о

о

о







о

о

о

о

о

о

120

122 122

123 126

128 129

132

133

134

134

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о



о

о

о

о

о

о





о

о

о

о

.

о



о

о





о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

136

о

о

о

о

о

о

о

о

о

о

137 138 138

3. СРЕДСГВА И СРЕДА ПРОГРАММИРОВАНИЯ о

о

о



о

о

о

о

о

о

о

о

о

о

о

о

о

о

о











о

о

.

о

.

.

.

.

.

.

.

.

.

.

.

.

.

о

о

.

.

.

.

.

.

о

о







о

о

о

о

.

.

о

о о .

о

о

о

о

о

о

о

3о 1 ПЕРВИЧНАЯ СРЕДА КОММОН ЛИСПА Аппаратная среда реализаций языка Составные части среды проrраммирования на Лиспе Интегрированность и прозрачность Редактирование проrрамм: ED Тестирование проrрамм: ТRАСЕ и SТЕР Прерывание вычислений: .IЩЕАК и ERRO� Трансляция проrрамм: COМPILE Система документирования и справочная система Комментарии Средства определения количественных характеристик вычислений .

.

.

.

о

о

о

о

о

о

о

о

о

о

о

о

о

о











о

о

о

о



о



.

о

о

о

о





о

о



о





о









о



о

































о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

















о

о



302 СРЕДА ИНТЕРЛИСПА

о

о

о



о







о









о

о

о



о

о

о

о

о

.

.

.

.

.

.

.

.

о





.

.

.

.

о

о

о



о

о

113 115 117 117 117 118 119

о

о

о



.

.

.

.

.

.

.

.

о

о

о

о

Списочный редактор - List Editor . Ассистент программиста - Programme r s Assistant Структурная печать Prettypri nt Прерывания - Break Package Прерывание вычислений и трассировка Работа с файлами Pile Package Транслятор - Compi ler Анализатор nрограммы Мasterscope Сnравочная система Help System Исправление ошибок - Do What 1 Меаn Лисп с фразовой структурой Conversational Lisp '

-

.

.

о

-

о

о

о

о

о

о

о

о

.







о

о



о

о

о

о

о

о

о

о

о

о

о

о









о

о

о

о

о

о







о

о



о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о



о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

-

.

о

о

-

-

.

о

139 141 142 143 145 147 147 150

151 151

152 154 155 156 157 157 158 158

159 159 161

Оглавление

316

о

о

о

о

о

Оконная система - Wi ndow System Целостность системы - System lntegration Библиотека программ - Lispusers Package Л итература о

о

о

о

о

о

3о3 СРЕдА ЗЕТАЛИСПА

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

4 ПРИМЕРЫ ПРОГРАММ 4. 1 ЛИСП НА ЛИСПЕ

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о о

о

о

.

о





о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о



о

о

о

о

о

172

о

о

о

о

о

о

о

о

о

о

174 174 175 176 178 181 183 184 185 188

о

о

о

о

о

о

о

о

о

о

о

о

о



о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

.

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о





о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о



о

о



о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о



о

о

о

о

о



о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о



о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о



о

о

о

о

о

о

о

о

о

о



о

о

о

о

170 170 170 170 171

о

о

о

169

о

402 МИI(СИМА Миксима - символьный вычислитель Действия и их порядок Чтение выражения с преобразованием в списочную форму Преобразование выражения в форму дерева Представление выражения в форме дерева Порядок обхода дерева Интерпретация и вычисление выражений Упрощение выражений Снятие скобок и вывод Диалог с Миксимой Литература о

165

166 166 167 168 169

о

о

о

164 165

о

о

о

161 162 162 163

о

о

о

о о

о

Интерпретатор Лиспа на Лиспе Примнтивы интерпретатора Универсальная функция EV AL1 Основная часть интерпретатора: APPL У1 Примеры вычислений Печать результатов - структурная печать Программирование диалога Программирование ввода и вывода Литература о

о о

о

о

о

о о

о

о

Объектная система Flavor Макрос итерации Loop Интерфейс пользователя Оконная система Интегрированные средства разработки Экранный редактор Zmacs Инспектор структур l nspector Отладчик программ Debugger Управление файлами Инспектор состояния Peek Zmai l и работа в сети Языки и инструменты Литература о

о

о

о

.

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о



о

о



о

о



о

о

о

о

о

о

о

о

о

о



о

о

о

о

.

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о



о

о



о

о

о





о

о

о

о



о

о

о

о



о

о

о

о

о

о

о

о

о



о

о

о

о



о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о



о



о

о

о



о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о



о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

.

о

о

о

о

о



о





о

403 ЯЗЫI( СПЛЕТНИI(А Исчезающие народные традиции

о







о

о



о

о

о





о

о

о

о







о























о

о

о

189 189 190 191 192 194 196 197 199

200

201

202

203

204

317

Огл авление Язык сплетника и цыганский жаргон . Анализ правил и их п рограммирование Выбор места разбиения слова на части Перевод слова и ключа Долгота и созвучие гласных . Перевод слов и предложений . . . . . . Расширение до цыганского жаргона . Литература . . . . . . . . . . . . . . . . . . . . . .

.

.

.

.

.

. . . . . . . . . . . . 204 .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. . . . . . . . . . . 205

. . . . . . . . . . . 206 .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

209

. 209 . . . . . . . . . . . . 212 . . . . . . . . . . . . 214 . . . . . . . . . . . . 215

4.4 ДАРВИН . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

Структура экспертной системы П редставление знаний . . . . . . Машина вывода . . . . . . . . . . Факты и правила . . . . . . . . . . . Правила вывода базы знаний Стратегия обратного вывода . Работа системы Дарвин . Примеры запросов Расширение системы Дарвин . Литература .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.



.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

4.5 СОЛНЕЧНАЯ СИСГЕМА

.

. . . .

. . . . .

.

.

.

.

.

.

.

.

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.





.

.

.

.

.

.

.

.





.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

5 РАЗВИТИЕ ЯЗЫКА ЛИСП И ЛИСП-СИСГЕМ .

5.1 ИСГОРИЯ ЛИСПА

.

.

.

.

.

.

.

.

.

218 218 219 219 221

.

.

.



.

. •.

.

.

.

.

.

.

.

.

.

.

.

.

.



.

.

.

.

.

.

234

. . . 235 . . 236

.

.

233

. . . 234

.

.

.

. . . . .

226 230 . . . . . . . . . . . . . . . . . . 231 232

.

.

. . . . .

. . . . . . . . . . . . . . . . . . 225

Сначала были созданы небо и Земля Окно в космос . . . . . . . . . . . . . . . . . . . . . . . . . . . Солнце, планеты и спутники . . . . . . . . . . . . . . . . И все-таки она вертится . Вращением спутника управляет демон . Создание небесных тел Запуск Солнечной системы . . . . . . . . . . . . . . . . . Литература . . . . . .

. . . . .

237

238

. . . 240 . . . 240 .

.

.

242 243

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.



.



.

.

.

.

.

.

.

.

Отец Лиспа - Джон Маккарти 243 Обработка списков и искусственный интеппе кт . . . . . 244 Значение Лиспа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 Ранние реализации Лиспа 247 Литература 248 .

.

.

.

.

.

.

.

.

.

.

.

.

.

.



.



.

.

.

.

.

.

.

.

.

.

.

.

.

.



.

.

.

.

.

.

.

.

.

.

.

.

.



.

.

.

.

.

.

.

.

.

.

' 5.2 ЛИСП РАСПРосrРАНЯЕТСЯ ПО СВЕТУ . . . . . . . . . . . 250

Развитие Лиспа в других странах . . . . . . . 250 Лисп в Западной Европе 250 Лисп в Восточной Европе 254 Лисп в далеких странах 256 Лисп в Скандинавии . . . . . . . . . . . . . . . . . . . . . . . . . . � Лисп в Финляндии . . . 260 Литература 265 .

.

.

.

.

.

.

.

.

.

.

.

.

.

.



.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.



.

.

.

.

.

.

.

.

.

.

.

.

.



.

.

.

.

.

.

.



.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.



.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

Оглавление

318 503 ЛИСП-СИСТЕМЫ

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о о

Маклисп - основной диапект восточного побережья BBN-Lisp, Хегох и Иитерписп Standard Lisp и PSL Franz Lisp N I L - New I mplementat ion of Lisp (новая реализация языка) Диалект Т йепьского университета Зеталисп Лисп-машин Вавилонская башня мира Лиспа Стандарт Коммои Лиспа Производитепи Лисп-машин приходят к договоренности Литература о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

504 ЛИСП-МАШИНЫ

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о ,

Бегство из систем разделения времени Первые изrотовитепи Успехи Лисп-машин Лисп или Пролоr? Литература о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

272 272 274 277 279 280 280 282 282 284 287 288 291 291 292 293 294 295

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

о

297

о

о

о

о

о

о

о

о

о

о

о

301

о

о

о

о

о

о

о

о

о

о

о

309

ПРИЛОЖЕИНЕ 10 Указатель функций и символов ПРИЛОЖЕНИЕ 20 Указатель имен и сокращеннА ПРИЛОЖЕИНЕ 3. Предметный указатель

о

о

о

о

о

ВВЕДЕНИЕ

ООДЕР.ЖЛНИЕ 1-ГО ТОМА

1 ВВЕДЕНИЕ В МИР Л ИС П А 1.1 Символьная обработка и искусственный интеллект 1,2 П р именекия искусственного интеллекта 1.3 Лисп - язык программирования искусственного и нтелле кта 2 ОСНОВЫ ЯЗЫКА ЛИСП 2.1 Символы и списки 2.2 Понятие функции 2.3 Вазовые функции 2.4 Имя и значение символа

2.5 Определение функций

2.6 Пе редача па раметров и область их действия 2. 7 Вычисление в Лиспе 2.8 Внутреннее представление списков 2.9 Свойства символа 2. 10 Ввод и вывод 3 ФУНКЦИОНАЛЬНОЕ П РОГРА ММИ РОВАНИЕ 3.1 Основы рекурсии 3.2 Простая рекурсия 3.3 Др угие фо р мы рекурсии 3.4 Функции более высокого порЯдка 3.5 П р именяющие функцианалы 3.6 Оrображающие функцианалы 3.7 Замыкания 3.8 Абстрактный подход 3.9 Макросы 4 ТИПЫ дАННЫХ 4. 1 Понятия 4.2 Числа 4.3 Символы 4.4 Списки 4.5 Строки 4.6 Последовательности 4.7 Массивы 4.8 Структуры 5

РЕШЕНИЯ

ПРИЛОЖЕНИЕ 1. Сводка Коммои Лиспа ПРИЛОЖЕНИЕ 2. Указатель символов Коммои Лисnа ПРИЛОЖЕНИЕ З. Указатель имен и сокращений ПРИЛОЖЕНИЕ 4. Предметный указатель

Учебное издание

Ээро Хювенен, Йоуко Сеппянен Мир Лиспа: Методы и системы программирования В 2-х томах. Т.2 Заведующий редакцией чл.-корр. АН СССР В.И.Арнольд Зам. зав. редакцией А. С. Попов Научный редактор М. В. Хатунцева Художественный редактор В. И.Шаповалов Художник Н.М. Иванов Графики С.А. Кравченко, Л. Г.Туранова Корректор Н.А. Гиря Технический редактор Е.С. Потапенкова ИБ .М7533 Оригинал-макет подготоален на переональном компьютере и отпеча . на лазерном принтере в издательстве • Мир'" Подписано к печати 28.04.90. Формат 84 Х 108 V32.

Бумага ти п . N't 1 . Печать высокая. Г арнитур а литературная. Объем 5,0 бум.л. Усл. печ.л. 16,80. Усл.кр.-отт. 17,05. Уч.- ._

14,57.

Изд. N't 1/1096 . Тир а ж 5О 000 экз. Зак. N't 547. Цена 1 р. 10 к.

Издательство М и р" В/0 "Совэкспорткнига" Госкомпечати. 129820, ГСП, Москва, И-110, 1-й Рижский пе р 2. "

.,

в Ленинградской типографии N12 головного предприятия ордена Трудового Красного Знамени Ленинградского объединения '"Техническая книга• им. Евгении Соколовой Государственного комитета СССР по печати. 198052, r.Ленинrрад. Л-52, Измайловекий проспект, 29. Отпечатано