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

Использование составных объектов

Категория:

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

Дисциплина:

Функциональное и логическое программирование

Город:

Беларусь, Минск

Учебное заведение:

БНТУ, ФИТР

Стоимость работы:

4 руб.

Оценка: 10
Объем страниц: 7
Год сдачи: 2021
Дата публикации: 09.09.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. Объявление альтернативных доменов.

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

84