Лабораторная работа
Prolog. Использование составных объектов
Категория: | Лабораторная работа |
Дисциплина: | Функциональное и логическое программирование |
Город: | Беларусь, Минск |
Учебное заведение: | БНТУ, ФИТР |
Тег: | #PROLOG |
Стоимость работы: | 5 руб. |
Оценка: | 10 |
Объем страниц: | 7 |
Год сдачи: | 2021 |
Дата публикации: | 24.12.2021 |
Фрагменты для ознакомления
Отчет по лабораторной работе № 8
дисциплина: «Функциональное и логическое программирование»
ИСПОЛЬЗОВАНИЕ СОСТАВНЫХ ОБЪЕКТОВ
Цель работы: приобретение практических навыков в составлении и отладке Пролог-программ с составными объектами.
Задание общее по лабораторной работе:
Сформировать базу данных о семьях (можно использовать файл semja.pro, приведенный в приложении). Каждая семья описывается одним предложением. Информация о семье представлена в виде структуры. Каждая семья состоит из трех компонент: мужа, жены и детей. Детей представить в виде списка, состоящего из произвольного числа элементов. Каждого члена семьи представить структурой, состоящей из четырех компонент: имени, фамилии, даты рождения, работы. Информация о работе - указание должности и оклада.
Пример одного из предложений базы данных:
семья(член_семьи(“Николай”,”Иванов”,дата(12,май,1948), работа(инженер,210)),
член_семьи(“Анна”,”Иванова”,дата(5,январь,1952), работа(врач,190)),
[член_семьи(“Инна”,”Иванова”,дата(20,март,1971), работа(студент,45)),
член_семьи(“Олег”,”Иванов”,дата(25,июнь,1978), работа(ученик,0))]).
Для упрощения запросов можно сформировать правила для следующих предикатов: муж, жена, дети, член_семьи, ребенок, дата_рождения, работа (примеры некоторых правил есть в файле semja.pro).
Из базы данных (файл семья.pro) получить следующую информацию:
7. Найти семьи без отца.
8. В какой семье есть дети-близнецы?
9. Найти людей, родившихся до 1950 г. и имеющих оклад менее 150.
10. Найти семьи без детей.
11. Найти семьи, где жена работает, а муж не работает.
Код программы:
domains
день, год, оклад = integer
имя, фамилия, месяц, должность = string
дата = дат(день, месяц, год)
работа = раб(должность, оклад)
член_семьи = чл_с(имя, фамилия, дата, работа)
список_детей = член_семьи*
список_имен_детей = string*
predicates
nondeterm menu
nondeterm menu_main(char)
nondeterm вопрос_7
nondeterm вопрос_8
количество_элементов_списка (список детей, integer) %подсчет количества
nondeterm близнецы (список_детей, фамилия)
nondeterm сравнивание_детей (список_детей, дата, фамилия, имя)
nondeterm вопрос_9
nondeterm проверка(string, string, integer, integer)
nondeterm вопрос_10
nondeterm вопрос_11
nondeterm семья(член_семьи, член_семьи, список_детей) %описание всех членов семьи
муж(член_семьи) %муж
жена(член_семьи) %жена
nondeterm список_детей_семьи(список_детей) %дети
nondeterm количество_детей_семьи(string, integer) %количество детей в данной семье
имена_детей(string, список_имен_детей) %список имен детей в данной семье
выбор_имен_детей(список_детей, список_имен_детей) %выбор имен детей %из списка детей
clauses
Скриншоты результатов:
Контрольные вопросы:
1. Что относится к простым данным?
2. Что называется, простым объектом, простой структурой?
3. Что такое составной объект и составная структура?
4. Функтор составного объекта.
5. Могут ли аргументы составного объекта быть также составными объектами?
6. Объявление составных доменов в разделе программы domains.
7. Сопоставление составных объектов.
8. Могут ли быть элементы списка составными объектами, как такой список объявляется в разделе domains?
9. Могут ли аргументами составного объекта быть списки?
10. Как задать цель в разделе goal, чтобы просматривалась вся база данных, состоящая из составных объектов, и в конце просмотра выводилось сообщение Yes?
11. Объявление альтернативных доменов.
Вывод: приобрёл практические навыки в составлении и отладке Пролог-программ с составными объектами.