courses:knowledge_base_and_expert_system:lab2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
courses:knowledge_base_and_expert_system:lab2 [2019/08/27 17:42]
andrey.suchkov [Основные теоретические положения]
courses:knowledge_base_and_expert_system:lab2 [2019/09/19 21:20]
andrey.suchkov [Порядок выполнения работы]
Line 1: Line 1:
 ====== Лабораторная работа №2: Разработка и отладка простой программы на языке Visual Prolog ====== ====== Лабораторная работа №2: Разработка и отладка простой программы на языке Visual Prolog ======
-====== Цель работы ​======+===== Цель работы =====
 Получение необходимых навыков для разработки и отладки простейшей программы на языке Visual Prolog. Получение необходимых навыков для разработки и отладки простейшей программы на языке Visual Prolog.
-====== Основные теоретические положения ​======+===== Основные теоретические положения =====
 Пролог (англ. Prolog) -- язык и система логического программирования,​ основанные на языке предикатов математической логики дизъюнктов Хорна, представляющей собой подмножество логики предикатов первого порядка. Пролог (англ. Prolog) -- язык и система логического программирования,​ основанные на языке предикатов математической логики дизъюнктов Хорна, представляющей собой подмножество логики предикатов первого порядка.
  
-Prolog является декларативным языком программирования:​ логика программы выражается в терминах отношений,​ представленных в виде фактов и правил. Для того чтобы инициировать вычисления,​ выполняется специальный запрос к базе знаний,​ на которые система логического программирования генерирует ответы ​«истина» и «ложь». Для обобщённых запросов с переменными в качестве аргументов созданная система Пролог выводит конкретные данные в подтверждение истинности обобщённых сведений и правил вывода.+Prolog является декларативным языком программирования:​ логика программы выражается в терминах отношений,​ представленных в виде фактов и правил. Для того чтобы инициировать вычисления,​ выполняется специальный запрос к базе знаний,​ на которые система логического программирования генерирует ответы ​<<истина>> ​и <<ложь>>. Для обобщённых запросов с переменными в качестве аргументов созданная система Пролог выводит конкретные данные в подтверждение истинности обобщённых сведений и правил вывода.
  
-Иначе говоря,​ предикат можно определить как функцию,​ отображающую множество произвольной природы в множество булевых значений {ложно,​ истинно}. Задача прологпрограммы заключается в том, чтобы доказать,​ является ли заданное целевое утверждение следствием из имеющихся фактов и правил.+Иначе говоря,​ предикат можно определить как функцию,​ отображающую множество произвольной природы в множество булевых значений {ложно,​ истинно}. Задача пролог-программы заключается в том, чтобы доказать,​ является ли заданное целевое утверждение следствием из имеющихся фактов и правил.
  
 Язык программирования,​ реализованный в Visual (а ранее в Turbo) Prolog'​е отличается от классического пролога тем, что он основан на строгой статической типизации. В него также добавлены средства объектно-ориентированного программирования,​ анонимные предикаты (лямбда-предикаты),​ факты-переменные и разрушающее присваивание для них, аргументы-домены (''​Generic Interfaces and Classes''​) и параметрический полиморфизм,​ мониторы (''​Monitors with guards''​),​ императивные конструкции (''​foreach'',​ ''​if<​nowiki>​...</​nowiki>​then<​nowiki>​...</​nowiki>​else''​),​ коллекторы списков (''​[<​nowiki>​...</​nowiki>​||<​nowiki>​...</​nowiki>​]''​) и пр. Язык программирования,​ реализованный в Visual (а ранее в Turbo) Prolog'​е отличается от классического пролога тем, что он основан на строгой статической типизации. В него также добавлены средства объектно-ориентированного программирования,​ анонимные предикаты (лямбда-предикаты),​ факты-переменные и разрушающее присваивание для них, аргументы-домены (''​Generic Interfaces and Classes''​) и параметрический полиморфизм,​ мониторы (''​Monitors with guards''​),​ императивные конструкции (''​foreach'',​ ''​if<​nowiki>​...</​nowiki>​then<​nowiki>​...</​nowiki>​else''​),​ коллекторы списков (''​[<​nowiki>​...</​nowiki>​||<​nowiki>​...</​nowiki>​]''​) и пр.
-====== Постановка задачи ====== +===== Постановка задачи ===== 
 +Разработать программу на языке Visual Prolog, описывающие родственные связи между собаками,​ а также реализовать генеалогическое древо Вашей семьи. 
 +===== Порядок выполнения работы ===== 
 +  - Загрузите систему программирования Visual Prolog. 
 +  - Установите в опциях среды шрифт с русской раскладкой **Options/​Global/​Environment**:​ 
 +    - На карточке **Fonts** поменяйте шрифт окна редактора **Editor Windows** на **Courier** с раскладкой Кириллица. 
 +    - Либо воспользуйтесь кнопкой **F** (//Font//) на панели инструментов. 
 +  - Выполните команду **Project/​New Project**. Определите в качестве //Project Name// ​имя //DOG// и укажите главный каталог (//Base Directory//​) в личной папке на диске. Нажмите кнопку **Create**. \\ В созданном проекте удалите модуль //​Vpitools.pro//​. Откройте модуль //​DOG.PRO//,​ удалите все содержимое и наберите текст программы:​ <code prolog>​domains 
 +  name=string 
 +predicates 
 +  dog(name) 
 +  parent(name,​ name) 
 +clauses 
 +  dog(X) :- parent(X,​Y),​ dog(Y). 
 +  dog("​Rex"​). 
 +  parent("​Jack","​Rex"​). 
 +goal 
 +  dog(Who). 
 +</​code>​ 
 +  - Установите опции компилятора **Options/​Project/​Compiler Options**:​ 
 +    - на карточке **Output** установите **Generate Debug Information** и **Disable Optimizations**,​ 
 +    - на карточке **Warnings** установите **Nondeterm**,​ снимите **Unused Variables** и **Unused Predicates**. 
 +  - Запустите программу на выполнение,​ нажав кнопку **Test Goal** на панели инструментов. Объясните полученный результат. 
 +  - Выполните компиляцию (**Compile Module**), построение (**Build**) и запустите отладчик **Debug**. 
 +  - В среде отладчика включите окна просмотра переменных (**Local Variables**) и стека вызовов (**Call Stack**). Произведите пошаговую прокрутку программы,​ нажимая на кнопку **Trace Into** на панели инструментов. 
 +  - Запишите и проанализируйте трассу выполнения программы по содержимому окон **Call Stack** и **Variables For Current Clause** для одного решения. 
 +  - Напишите на языке Visual Prolog программу //DOG1//, описывающую родственные связи собак в соответствии с вариантом задания. Программа должна использовать предикаты //dog// и //parent// из программы //DOG.PRO// и содержать не менее двух правил. 
 +  - Произведите отладку программы в системе Visual Prolog на следующих запросах:​ 
 +    - Кто является собакой?​ 
 +    - Кто является родителем?​ 
 +    - Кто является внуком (внучкой)?​ 
 +    - Balto -- собака?​ 
 +    - Кто родитель собаки Balto? 
 +    - Кому Balto является родителем?​ 
 +  - Постройте трассу выполнения программы для каждого запроса. 
 +  - **//​Задание для самостоятельной работы.//​** Используя предикаты ''​parent(symbol,​symbol)'',​ ''​man(symbol)'',​ ''​woman(symbol)'',​ ''​married(symbol,​symbol)'',​ записать факты, описывающие Вашу семью. \\ Написать на языке Visual Prolog программу //FAMILY//, содержащую не менее 8 правил вывода для любых родственных отношений в Вашей семье (например:​ мать, отец, сестра,​ брат, племянница,​ племянник,​ тетя, дядя, внучка,​ внук, бабушка,​ дедушка,​ двоюродная сестра,​ двоюродный брат и т.д.). \\ Отладить программу на 5-6 различных запросах. 
 +===== Варианты заданий ​===== 
 +[[.lab2:​lab2_vars]] 
 +===== Содержание отчёта ===== 
 +  * Цель работы. 
 +  * Краткое изложение основных теоретических понятий. 
 +  * Постановка задачи с кратким описанием порядка выполнения работы. 
 +  * Объяснение результатов выполнения программы //​DOG.PRO//​. 
 +  * Трасса выполнения программы //DOG.PRO// и пояснения к ней. 
 +  * Трассы выполнения запросов программы //​DOG1.PRO//​ и объяснение результатов их выполнения. 
 +  * Описание родственных связей в семье (в виде дерева). 
 +  * Результаты работы программы //​FAMILY.PRO//​ для 5-6 разных запросов. 
 +  * Общий вывод по проделанной работе. 
 +  * Коды программ.
courses/knowledge_base_and_expert_system/lab2.txt · Last modified: 2022/12/10 09:08 (external edit)