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

Prolog. Составление простейшей пролог-программы

Категория:

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

Дисциплина:

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

Город:

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

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

БНТУ, ФИТР

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

бесплатный

Оценка: 10
Объем страниц: 5
Год сдачи: 2021
Дата публикации: 07.06.2021

Фрагменты для ознакомления

Отчет по лабораторной работе № 2

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

СОСТАВЛЕНИЕ ПРОСТЕЙШЕЙ ПРОЛОГ-ПРОГРАММЫ

Цель работы: приобретение практических навыков составления, отладки и выполнения простейшей программы в системе программирования Visual Prolog (режим Test Goal).

Постановка задачи:

Описать средствами Visual Prolog (с помощью фактов) дерево родственных отношений (рис. 1), используя предикат parent с двумя параметрами: имя родителя и имя ребенка.

Дерево родственных отношений

Задание:

В окне диалога сформировать следующие вопросы:

1.        Является ли Иван родителем Нины?

2.        Является ли Иван родителем Аллы?

3.        Кто родители Ларисы?

4.        Как зовут детей Олега?

5.        Кто родитель родителя Натальи?

6.        Кто чей родитель?

7.        Есть ли у Нины и Олега общий родитель?

8.        Как зовут жену Ивана?

9.        Кто у Анны внуки?

10.      Есть ли у Ларисы брат или сестра?

 

Код программы:

Lab_2.pro

predicates
nondeterm parent(string,string)
clauses
parent ("Иван","Нина").
parent ("Иван","Олег").
parent ("Анна","Нина").
parent ("Анна","Олег").
parent ("Олег","Алла").
parent ("Олег","Лариса").
parent ("Вера","Алла").
parent ("Вера","Лариса").
parent ("Виктор","Наталья").
parent ("Лариса","Наталья").
goal
%write ("1. Является ли Иван родителем Нины? "),parent ("Иван","Нина").
%write ("2. Является ли Иван родителем Аллы? "),parent ("Иван","Алла").
%write ("3. Кто родители Ларисы?  "),nl,parent (Родитель, "Лариса").
%write ("4. Как зовут детей Олега? "),nl,parent("Олег", Детей_зовут).
%write("5. Кто родитель родителя Натальи "),nl,parent (Родитель, "Наталья"), parent(Родитель_родителя, Родитель).     
%write ("6. Кто чей родитель? "),nl, parent (Родитель, Ребёнок ).                  
%write ("7. Есть ли у Нины и Олега общий родитель? "),nl,parent (Общий_родитель, "Нина"), parent(Общий_родитель, "Олег").               
%write(" 8. Как зовут жену Ивана?"),nl,parent ("Иван", Ребёнок), parent(Жена, Ребёнок), Жена<>"Иван".                
%write ("9. Кто у Анны внуки? "),nl, parent ("Анна", X),parent(X, Внуки).
%write ("10. Есть ли у Ларисы брат или сестра? "),nl,parent (Родитель, "Лариса"), parent(Родитель, Сестра), Сестра <> "Лариса". 

 

Скриншоты результатов:

Скриншоты результатов
Скриншоты результатов

Контрольные вопросы:

 

1.  Где был разработан Пролог?

Создан во Франции в Марсельском университете в 1971 году.

                

2. К какой группе языков относится Пролог?

Декларативный язык программирования общего назначения, относится к группе языков логического программирования.

 

3. Что является теоретической основой Пролога?

Теоретической основой Пролога является раздел символьной логики, называемый исчислением предикатов.

 

4. Что такое терм? Какие объекты данных Пролога могут использоваться в качестве термов?

Объекты данных в Прологе называются термами. Терм может быть: константой, перемен-ной, структурой (составной терм).

 

5. Что может быть в качестве атома?

Атом - это синтаксически неделимый терм. В качестве атома могут быть: имя Visual Prolog (имя – это начинающаяся с буквы последовательность букв, цифр и символа подчёркивания), строчное представление числа (например, “1048”, “25.6”), отдельный символ (кроме пробела).

 

6. Как записываются в Visual Prolog числа?

Например, -15, 1235, 9, 4.8, 2.45E-8

 

7. Чем отличаются записи констант и переменных?

Переменные от констант отличаются первой буквой имени: у констант она строчная, у переменных –заглавная буква или символ подчеркивания.

 

8. Что такое анонимная переменная, когда она используется?

Каждая анонимная переменная – это отдельный объект. Анонимные переменные используются для обозначения объектов, значения которых не играют роли в данном предложении.

 

9. Форма записи структур (сложных термов).

Пример структуры: data_r (12, mart,1962). Здесь data_r – функтор, 12, mart, 1962 – компоненты. Арность приведенной структуры равна трем.

 

10. Из каких основных разделов состоит программа Visual Prolog, назначение этих разделов?

/*      комментарии        */
domains
<описание доменов (типов данных)>
predicates
<описание предикатов>
clauses
<предложения или утверждения>
goal
<целевое утверждение>

 

11. Может ли быть в программе Visual Prolog несколько одинаковых разделов?

Программа может содержать несколько разделов domains, predicates, facts и clauses, а также несколько объявлений и реализаций классов.

 

12. С какого раздела начинается выполнение программы Visual Prolog?

Работа программы всегда начинается с выполнения раздела Goal.

 

13. В каком разделе программы описываются пользовательские (нестандартные) типы данных?

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

 

14. Что такое предикат и в каких разделах программы его имя может использоваться?

Предикат (отношение) в общем случае - это структура вида: predname(komp1, komp2,...), где predname - имя предиката, komp1,... - типы компонентов, описанные в разделе domains или стандартные типы.

 

15. Что является аналогом предиката в процедурных языках?

Аналоги прототипов функций.

 

16. Какие объекты могут быть в качестве компонент факта?

Компонентами факта могут быть только константы.

 

17. Какой тип предложения записывается в разделе goal?

В разделе goal записывается вопрос (цель), состоящая из одного или нескольких целевых утверждений.

 

18. Способы записи комментариев в программе Visual Prolog?

/*     комментарии        */, %

 

Вывод: приобрели практические навыки в составлении, отладки и выполнении простейшей программы в системе программирования Visual Prolog (режим Test Goal).

61