Читаем Prolog полностью

        ?-  семья( Муж, Жена, Дети),

             общий( [ Муж, Жена | Дети], Доход),

             длина( [ Муж, Жена | Дети], N),

             Доход/N < 2000.

Упражнения

4. 1.    Напишите вопросы для поиска в базе данных о семьях.

(а)        семей без детей;

(b)        всех работающих детей;

(с)        семей, где жена работает, а муж нет,

(d)        всех детей, разница в возрасте родителей которых составляет не менее 15 лет.

Посмотреть ответ

4. 2.    Определите отношение

        близнецы( Ребенок1, Ребенок2)

для поиска всех близнецов в базе данных о семьях.

Посмотреть ответ

Назад | Содержание | Вперёд

Назад | Содержание | Вперёд

4. 2.    Абстракция данных

Абстракцию данных можно рассматривать как процесс организации различных фрагментов информации в единые логические единицы (возможно, иерархически), придавая ей при этом некоторую концептуально осмысленную форму. Каждая информационная единица должна быть легко доступна в программе. В идеальном случае все детали реализации такой структуры должны быть невидимы пользователю этой структуры. Самое главное в этом процессе - дать программисту возможность использовать информацию, не думая о деталях ее действительного представления.

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

доступ к конкретным компонентам семьи,

не зная деталей рис. 4.1. Такие отношения можно назвать

селекторами

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

        отношение_селектор(Объект, Выбранная_компонента)

Вот несколько селекторов для структуры семья:

        муж( семья( Муж, _, _ ), Муж).

        жена( семья( _, Жена, _ ), Жена).

        дети( семья( _, _, СписокДетей ), СписокДетей).

Можно также создать селекторы для отдельных детей семьи:

        первыйребенок( Семья, Первый) :-

              дети( Семья, [Первый | _ ]).

        второйребенок( Семья, Второй) :-

              дети( Семья, [ _, Второй | _ ]).

        . . .

Можно обобщить этот селектор для выбора N-го ребенка:

        nребенок( N, Семья, Ребенок) :-

              дети( Семья, СписокДетей),

              n_элемент( N, СписокДетей, Ребенок)

                                                       % N-й элемент списка

Другим интересным объектом является "член семьи". Вот некоторые связанные с ним селекторы, соответствующие рис. 4.1:

        имя( членсемьи( Имя, _, _, _ ), Имя).

        фамилия( членсемьи( _, Фамилия, _, _ ), Фамилия).

        датарождения( членсемьи( _, _, Дата), Дата).

Какие преимущества мы можем получить от использования отношений-селекторов? Определив их, мы можем теперь забыть о конкретном виде структуры представления информации. Для пополнения и обработки этой информации нужно знать только имена отношений-селекторов и в оставшейся части программы пользоваться только ими. В случае, если информация представлена сложной структурой, это легче, чем каждый раз обращаться к ней в явном виде. В частности, в нашем примере с семьей пользователь не обязан знать, что дети представлены в виде списка. Например, предположим, мы хотим сказать, что Том Фокс и Джим Фокс принадлежат к одной семье и что Джим - второй ребенок Тома. Используя приведенные выше отношения-селекторы, мы можем определить двух человек, назовем их Человек1 и Человек2, и семью. Следующий список целей приводит к желаемому результату:

        имя( Человек1, том), фамилия( Человек1, фокс),

                                                   % Человек1 - Том Фокс

        имя( Человек2, джим), фамилия( Человек1, фокс),

                                                   % Человек2 - Джим Фокс

        муж( Семья, Человек1),

        второйребенок( Семья, Человек2)

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных