Лабораторная работа

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. Объявление альтернативных доменов.

Вывод: приобрёл практические навыки в составлении и отладке Пролог-программ с составными объектами.

146