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
courses:knowledge_base_and_expert_system:lab2 [2019/08/27 21:24]
andrey.suchkov [Цель работы]
courses:knowledge_base_and_expert_system:lab2 [2022/12/10 09:08] (current)
Line 2: Line 2:
 ===== Цель работы ===== ===== Цель работы =====
 Получение необходимых навыков для разработки и отладки простейшей программы на языке 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.1566941042.txt.gz · Last modified: 2022/12/10 09:08 (external edit)