184
Глава 2. Построение абстракций с помощ ью данных
в. Выберите еще какое-нибудь правило дифференцирования, например для возведения в степень
(упражнение 2.56), и установите его в систему.
г. В этой простой алгебраической системе тип выражения — это алг ебраическая операция верх-
него уровня. Допустим, однако, что мы индексируем процедуры противоположным образом, так
что строка диспетчеризации в deriv выглядит как
((get (operator exp) ’deriv) (operands exp) var)
Какие изменения потребуются в сис теме дифференцирования?
Упражнение 2.74.
Insatiable Enterprises, Inc. — децентрализованная компания-конгломерат, которая состоит из боль-
шого количества независимых подразделений, раскиданных по всему миру. Недавно вычислитель-
ные мощности компании были связаны умной вычислительной сетью, создающей для пользователя
иллюзию, что он работает с единым компьютером. Президент компании, когда она в первый раз
пытается воспользоваться способностью системы осуществлять доступ к файлам подразделений, с
изумлением и ужасом обнаруживает, что, несмотря на то, что все эти файлы р еализованы в виде
структур данных на Scheme, конкретная структура данных отличается от подразделения к под-
разделению. Спешно созывается совещание менеджеров подразделений, чтобы найти стратегию,
которая позволила бы собрать файлы в единую систему для удовлетворения нужд главного офиса,
и одновременно сохранить существующую автономию подразделений.
Покажите, как таку ю стратегию можно реализовать при помощи программирования, управ-
ляемого данными. К примеру, предположим, что сведения о персонале каждого подразделения
устроены в виде единого файла, который содержит набор записей, проиндексированных по имени
служащего. Структура набора данных от подразделения к подразделению различается. Более того,
каждая запись сама по себе — набор сведений (в разных подразделениях устроенный по-разному),
в котором информация индексируется метками вроде address (адрес) или salary (зарплата). В
частности:
а. Для главного офиса реализуйте процедуру get-record, которая получает запись, относящу-
юся к указанному служащему, из указанного файла персонала. Процедура должна быть применима
к файлу любого подразделения. Объясните, как должны быть структурированы файлы отдельных
подразделений. В частности, какую информацию о типах нужно хранить?
б. Для главного офиса реализуйте процедуру get-salary, которая возвращает зарплату ука-
занного служащего из файла любого подразделения. Как должна быть устроена запись, чтобы
могла работать эта процедура?
в. Для главного офиса напишите процедуру find-employee-record. Она должна искать в
файлах всех подразделений запись указанного служащего и возвращать эту запись. Предполо-
жим, что в качестве аргументов эта процедура принимает имя служащего и список файлов всех
подразделений.
г. Какие изменения требуется внести в систему, чтобы внести в центральную систему информа-
цию о новых служащих, когда Insatiable поглощает новую компанию?
Передача сообщений
Основная идея программирования, управляемого данными, состоит в том, чтобы ра-
ботать с обобщенными операциям и в программах при помощи явных манипуляций с
таблицами операций и типов, вроде таблицы на рисунке 2.22. В стиле программиро-
вания, который мы применяли в разделе 2.4.2, диспетчеризация по типу организуется