- •Лабораторная работа №4
- •Теоретическая часть
- •1. Простые объекты данных
- •1.1. Переменные как объекты данных
- •1.2. Константы как объекты данных
- •2. Составные объекты данных и структуры
- •2.1.Унификация составных объектов
- •2.2. Использование знака равенства для унификации составных объектов
- •2.3. Использование нескольких значений как единого целого
- •2.4. Объявление составных объектов
- •2.5. Многоуровневые составные объекты
- •Практическое задание
- •Контрольные вопросы
2.5. Многоуровневые составные объекты
Visual Prolog позволяет конструировать составные объекты на нескольких уровнях. Например, в:
book(“The Ugly Duckling”, “Andersen”)
вместо фамилии автора можно использовать новую структуру, которая описывает автора более детально, включая имя и фамилию. Вызывая функтор для нового объекта author (автор), можно изменить описание книги на:
book(“The Ugly Duckling”, author( “Hans Christian”, “Andersen”))
В старом определении домена
book(title, author)
вторым аргументом функтора book был author. Но старое определение
author = symbol
может включать только одно имя, а этого уже недостаточно. Определим теперь объект author как составной объект, состоящий из имени и фамилии автора. Это достигается с помощью декларации следующего домена:
author = author(first_name, last_name)
что приводит к следующим определениям:
domains
articles = book(title, author); .. % 1-й уровень
author = author(first_name, last_name) % 2-й уровень
title, first_name, last_name = symbol % 3-й уровень
При использовании составных объектов со многими уровнями часто помогает такое «дерево»:
book
/ \
/ \
title author
/ \
/ \
first_name last_name
Рис. 3. Дерево многоуровневого составного объекта
Декларация домена объявляет только один уровень дерева, а не целое дерево. Например, book не может быть описана таким предложением:
domains
book = book(title, author(first_name, last_name)) % неправильно
Практическое задание
Индивидуальное задание. Описать заданную базу данных, используя составные объекты данных.
Имеется информация о служащих некоторой фирмы (не менее 10): фамилия, имя, отчество, год рождения, пол. Кроме того, известно о том, какую должность занимает служащий и какова его ставка. Построить правила, позволяющие получить
ФИО всех служащих;
ФИО тех сотрудников, ставка которых превышает указанную пользователем величину;
ФИО и должность всех женщин;
ФИО и должность людей, старше указанного пользователем возраста.
Описать базу данных о продукции магазина: группа товара, наименование товара, информация о реализации (объем поставок, срок реализации, цена). Написать правила, с помощью которых можно узнать о:
всей продукции, имеющейся в магазине;
продукции заданной пользователем группы;
объем поставок и цену продукции, срок реализации которой составляет меньше 10 суток;
сумме, на которую поставляется указанный пользователем товар.
Описать базу данных, хранящую информацию о животных небольшого зоопарка:
Контрольные вопросы
?
