Лабораторная работа №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 различных запросах.

Варианты заданий

Варианты к лабораторной работе №2

Содержание отчёта

Цель работы.

Краткое изложение основных теоретических понятий.

Постановка задачи с кратким описанием порядка выполнения работы.

Объяснение результатов выполнения программы DOG.PRO.

Трасса выполнения программы DOG.PRO и пояснения к ней.

Трассы выполнения запросов программы DOG1.PRO и объяснение результатов их выполнения.

Описание родственных связей в семье (в виде дерева).

Результаты работы программы FAMILY.PRO для 5-6 разных запросов.

Общий вывод по проделанной работе.

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