courses:knowledge_base_and_expert_system:lab2

Differences

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

Link to this comparison view

courses:knowledge_base_and_expert_system:lab2 [2019/09/09 06:54]
andrey.suchkov [Основные теоретические положения]
courses:knowledge_base_and_expert_system:lab2 [2022/12/10 09:08]
Line 1: Line 1:
-====== Лабораторная работа №2: Разработка и отладка простой программы на языке Visual Prolog ====== 
-===== Цель работы ===== 
-Получение необходимых навыков для разработки и отладки простейшей программы на языке Visual 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 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)