Лабораторная работа №3. Структурированные типы данных

Требования к содержанию, оформлению и порядку выполнения

1.  Создать в системе программу, которая демонстрирует использование структурированных данных согласно варианту.

2.  В программе должно быть не менее 10 записей структурированного типа.

3.  В программе задать правила, позволяющие осуществлять поиск данных.

4.  В программе задать правила, позволяющие выводить список данных, без использования в голове правила переменных.

5.  Составить отчет о проделанной работе.

6.  Содержание отчета:

·  Исходные тексты программ на языке Пролог.

·  Наборы тестовых данных и результаты работы программ.

·  Перечень и анализ ошибок.

·  Выводы по работе.

Теоретическая часть

Структурные объекты (или структуры) – это объекты, которые состоят из нескольких компонент, которые, в свою очередь, также могут быть структурами. Структуры в языке Пролог аналогичны записям в Паскале или структурам в Си. Структурные объекты в Прологе определяются функтором и аргументами. Например, для представления даты, состоящей из трех компонент (день, месяц, год), можно воспользоваться определением функтора ‘дата’ с тремя аргументами:

date (11, january, 1978).

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

date (Day, january, 1978).

Использование вложенных структур иллюстрирует следующий пример:

human(sergei, ivanov, date(10, may, 1975)).

human(ivan, petrov, date(15, october, 1969)).

НЕ нашли? Не то? Что вы ищете?

Для удобства взаимодействия с такой базой данных можно описать запросы, например:

human(FirstName, LastName, _)-запрос, перечисляющий всех людей из базы данных

human (FirstName, LastName, date(_, _, 1975).- все люди, родившиеся в 1975 году

birthday(human(_, _, Date), Date).- запрос, позволяющий найти человека по указанной дате рождения.

Общая постановка задачи

Составить программу, которая демонстрирует использование структурированных данных согласно варианту.

Список индивидуальных данных

1.  Телефонный справочник

2.  Цветочный магазин

3.  Студенты

4.  Картинная галерея

5.  Ресторан

6.  Компьютерный магазин

7.  Больница

8.  Библиотека

9.  Военкомат

10.  Музыкальный магазин

11.  Гостиница

12.  Расписание ЖД

13.  Аптека

14.  Туристическое агентство

15.  Театр

16.  Магазин бытовой техники

17.  Сотрудники

18.  Мобильные телефоны

19.  Кинотеатр

20.  Автомобильный магазин

Пример выполнения работы

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

Для этого сначала описываем структуру такого вида:

phone_list(person(‘Павел’, ‘Николаев’), ‘’, b_date(‘январь’, 3, 1955)).

Аргументами функтора phone_list являются:

· вложенная структура person, которая хранит имя, фамилию владельца телефона,

· номер телефона,

· вложенная структура person, которая месяц, день и год рождения владельца телефона.

Задаем 10 структурированных записей:

phone_list(person(‘Павел’, ‘Николаев’), ‘’, b_date(‘январь’, 3, 1955)).

phone_list(person(‘Дмитрий’, ‘Мостовой’), ‘’, b_date(‘февраль’, 5, 1985)).

phone_list(person(‘Вадим’, ‘Богданов’), ‘’, b_date(‘март’, 3, 1935)).

phone_list(person(‘Игорь’, ‘Данилов’), ‘’, b_date(‘май’, 29, 1951)).

phone_list(person(‘Сергей’, ‘Огурцов’), ‘’, b_date(‘апрель’, 12, 1962)).

phone_list(person(‘Юрий’, ‘Нестеренко’), ‘’, b_date(‘июнь’, 17, 1980)).

phone_list(person(‘Борис’, ‘Палеев’), ‘’, b_date(‘май’, 20, 1986)).

phone_list(person(‘Григорий’, ‘Жариков’), ‘’, b_date(‘июль’, 16, 1981)).

phone_list(person(‘Юрий’, ‘Никитин’), ‘’, b_date(‘август’, 10, 1981)).

phone_list(person(‘Юлия’, ‘Юнусова’), ‘’, b_date(‘сентябрь’, 25, 1981)).

Теперь зададим правила для работы со справочником:

1.  Правило для нахождения человека по его номеру телефона и наоборот:

get_person_with_phone(X, Y,Z):- phone_list(person(X, Y),Z,_).( рис.9).

Рис.9. Демонстрация использования правила get_person_with_phone(X, Y,Z).

2.  Правило для нахождения даты рождения человека по его имени и фамилии и наоборот:

get_person_with_date(X, Y,A, B,C):- phone_list(person(X, Y),_,b_date(A, B,C)).( рис.10)

Рис.10. Демонстрация использования правила get_person_with_date(X, Y,A, B,C).

3.  Правило для получения данных по какому-то из параметров: get_person_with_all(X, Y,Z, A,B, C):- phone_list(person(X, Y),Z, b_date(A, B,C)).(рис.11)

4.  Правило для вывода списка владельцев и их телефонов:

get_person:-phone_list(person(X, Y),Z,_),write(X),write(“ ”),write(Y),write(“ “),write(Z),nl, fail.

Рис.11. Демонстрация использования правила get_person_with_all(X, Y,A, B,C).

Контрольные вопросы к защите

1.  Опишите задание структуры в Прологе.

2.  Что такое функтор?

3.  Что такое арность функтора?

4.  Что такое вложенная структура?