Содержание
Лабораторная работа №2: Разработка и отладка простой программы на языке Visual Prolog
Цель работы
Получение необходимых навыков для разработки и отладки простейшей программы на языке Visual Prolog.
Основные теоретические положения
Пролог (англ. Prolog) – язык и система логического программирования, основанные на языке предикатов математической логики дизъюнктов Хорна, представляющей собой подмножество логики предикатов первого порядка.
Prolog является декларативным языком программирования: логика программы выражается в терминах отношений, представленных в виде фактов и правил. Для того чтобы инициировать вычисления, выполняется специальный запрос к базе знаний, на которые система логического программирования генерирует ответы «истина» и «ложь». Для обобщённых запросов с переменными в качестве аргументов созданная система Пролог выводит конкретные данные в подтверждение истинности обобщённых сведений и правил вывода.
Иначе говоря, предикат можно определить как функцию, отображающую множество произвольной природы в множество булевых значений {ложно, истинно}. Задача пролог-программы заключается в том, чтобы доказать, является ли заданное целевое утверждение следствием из имеющихся фактов и правил.
Язык программирования, реализованный в Visual (а ранее в Turbo) Prolog'е отличается от классического пролога тем, что он основан на строгой статической типизации. В него также добавлены средства объектно-ориентированного программирования, анонимные предикаты (лямбда-предикаты), факты-переменные и разрушающее присваивание для них, аргументы-домены (Generic Interfaces and Classes
) и параметрический полиморфизм, мониторы (Monitors with guards
), императивные конструкции (foreach
, if...then...else
), коллекторы списков ([...||...]
) и пр.
Постановка задачи
Разработать программу на языке 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, удалите все содержимое и наберите текст программы: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).
- Установите опции компилятора 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 различных запросах.
Варианты заданий
Содержание отчёта
- Цель работы.
- Краткое изложение основных теоретических понятий.
- Постановка задачи с кратким описанием порядка выполнения работы.
- Объяснение результатов выполнения программы DOG.PRO.
- Трасса выполнения программы DOG.PRO и пояснения к ней.
- Трассы выполнения запросов программы DOG1.PRO и объяснение результатов их выполнения.
- Описание родственных связей в семье (в виде дерева).
- Результаты работы программы FAMILY.PRO для 5-6 разных запросов.
- Общий вывод по проделанной работе.
- Коды программ.