Автор работы: Пользователь скрыл имя, 20 Января 2014 в 20:15, лабораторная работа
Языки типа Бейсик – императивные, в них команды определяют действия, которые необходимо выполнить исполнителю алгоритма [Кларк К., Маккейб Ф. Введение в логическое программирование на микро - Прологе.- М. Радио и связь, 1987.-312 с.] Дескриптивные (декларативные) языки определяют набор отношений или функций, которые должны быть выполнены.
Лабораторная работа №2
ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ-Д
Время: 2 часа.
Место: компьютерный класс
Учебные вопросы:
.
Литература и материальное обеспечение:
Языки типа Бейсик – императивные, в них команды определяют действия, которые необходимо выполнить исполнителю алгоритма [Кларк К., Маккейб Ф. Введение в логическое программирование на микро - Прологе.- М. Радио и связь, 1987.-312 с.] Дескриптивные (декларативные) языки определяют набор отношений или функций, которые должны быть выполнены.
В логическом программировании [А.Е. Соловьёв Специальная математика. Конспект лекций. Пермь ПГТУ.2003 г. ] программист не только не занимается управлением памятью, но и не управляет вычислениями. (Для логической программы, например, нельзя нарисовать блок-схему).
Логическое программирование не является программированием в традиционном понимании этого слова, поскольку программист в данном случае пишет не программу-алгоритм, а логическую модель. Как правило, такая модель может быть использована для решения не одной, а ряда задач, определенного моделью круга.
Математической основой логического программирования является метод резолюций.
Язык Пролог (ПРОграммирование с помощью ЛОГики) создан А. Колмеройером в 1970 году во Франции, распространен в Венгрии, Англии, Японии.
Рассмотрим одну из модификаций Пролога – русифицированный Пролог-Д.
Программа на Прологе представляет из себя базу знаний, представленных в виде не содержащих свободных переменных дизъюнктов. Дизъюнкты делятся на факты, правила и вопросы.
В Прологе используются только хорновские дизъюнкты, то есть дизъюнкты, в которых не больше одного не инверсного предиката. В Прологе их называют обычно предложениями или клаузами (дизъюнктами, элементами КНФ).
Правила могут иметь в общем случае вид , где
- предикаты,
что при переводе в дизъюнкты будет
В Прологе это записывается наоборот:
,
где - называются целями, причём запятая обозначает конъюнкцию, а в конце ставится точка.
Дизъюнкт, состоящий только из инверсных предикатов – вопрос, то есть, это - импликация в 0 :
В Прологе это записывается так:
В конце – точка.
А дизъюнкт, состоящий лишь из одно не инверсного предиката – факт, то есть это импликация из 0:
В Прологе это записывается так:
В конце – точка.
Система Пролог-Д для Windows. На дискете (в архиве, в рабочей директории) должны быть файлы:
1. Интерфейс и синтаксис логического языка программирования «Пролог-Д».
Интерфейс логического языка программирования «Пролог-Д» аналогичен интерфейсу и приемам работы в операционной системе WINDOWS.
Для начала работы с «Пролог-Д» необходимо зайти в папку под названием «Пролог-Д», расположение которой укажет преподаватель. Затем выбрать ярлык Пролога-Д или с помощью программ просмотра диска найти файл с программой prologw.exe и двойным нажатием левой клавиши мыши инициировать его исполнение. На экране появится заставка системы Пролог-Д Windows (рисунок 1).
Рисунок 1 Экран системы Пролог-Д в MS Windows.
Изображенный на рисунке 1.. интерфейс является стандартным для систем, работающих в среде Windows. Управлять системой можно с помощью манипулятора мышь, или с помощью специальной клавиатуры Windows.
Падающее меню Файлы.
Система позволяет работать одновременно с нескольким файлами аналогично работе в ОС WINDOWS.
Элемент меню Исполнение.
Содержит элементы Исполнить, Прервать и Настройки. На рисунке 2 показана панель настроек.
Рисунок 2. Панель настроек режимов исполнения Пролог-программы.
Отмечая или снимая отметки в соответствующих квадратиках панели настроек можно включить и выключить трассировку, вывод вопроса, поручить системе сохранять текст программы при каждом отладочном запуске, а также выбрать, куда направлять вывод в ходе исполнения программы. Мы не будем пока заниматься настройкой исполнения.
Элемент меню Окна.
При выборе этого элемента появляется падающее меню. Выбор элементов меню Каскад, Мозаика, Упорядочить и Свернуть все определяет взаимное расположение окон на экране.
Элемент меню Помощь
При выборе данного элемента меню пользователю предоставляется возможность выбор различных видов помощи, указываемых в падающем меню: помощь о программе и помощь по разделам. Все виды помощи построены по гипертекстовому принципу с использование стандартной подсистемы организации помощи MS Windows(рисунок 3).
Рисунок 3. Подсистема помощи
Синтаксис языка «Пролог-Д» подробно описан в файле помощи - кнопка или окно Помощь, Язык, Синтаксис. Откройте его и просмотрите.
База знаний.
Синтаксис: БазаЗнаний ::= {Предложение}*
Предложение::= Факт ¦ Правило ¦ Комментарий
Комментарий::= "{СимволASCII}*"
База знаний на Прологе-Д состоит из множества фактов и правил.
Факты.
Синтаксис:
Факт ::= Предикат.
Предикат ::= Имя(Аргумент{,Аргумент}*) ¦ Имя
Имя ::= БукваСимвол{Символ}* Константа::= Целое ¦ Словосочетание
В данной версии
Пролога-Д длина имени
Правила.
Синтаксис: Правило::= Предикат:-Цель{,Цель}*.
Цель ::= Предикат ¦ !
Правило описывает отношения между объектами. Предикат, стоящий слева от знака импликации :- называется головой, а предикаты, стоящие справа - целями или посылками. Правило может иметь любое число целей. (Правило без целей - это факт). Декларативно правило P0:-P1,..,Pn. читается так: P0 истинный, если P1, .. , Pn истинны. Процедурно это значит, что для удовлетворения P0 необходимо последовательно удовлетворить P1, .. , Pn.
Вопрос.
Синтаксис: Вопрос::= ?Цель{,Цель}*. Процедурно вопрос означает исполнение программы на Прологе-Д.
Примечания:
Будем заканчивать правила и факты точкой, а в качестве знака импликации использовать символ:-
Задание №1.Программа «Родство»
Пусть дано дерево родства:
Записать и инициировать выполнение программы «Родство», построить в тетради модифицированное дерево опровержения.
отец(Иван,Сидор).
отец(Иван,Яков).
отец(Сидор,Макар).
отец(Яков,Платон).
брат(Х,У):-отец(З,Х),отец(З,У)
дядя(Х,У):-отец(З,У),брат(Х,З)
?брат(Сидор,Х).
?дядя(У,Х).
Задание №2.Программа «Автомобили»
Записать и инициировать выполнение программы «Автомобили», построить в тетради модифицированное дерево опровержения.
автомобиль( Сузуки, Япония).
автомобиль (Адмирал, Китай).
автомобиль (Жигули, Россия).
автомобиль (Нива, Россия).
автомобиль (Мерседес, Германия).
автомобиль (Ауди, Германия).
российский(х):-автомобиль(х,
иномарка(з):-автомобиль(з,
иномарка(з):-автомобиль(з,
иномарка(з):-автомобиль(з,
?российский(у).
Задание №3.Программа «Сократ»
Записать и инициировать выполнение программы «Родство», построить в тетради модифицированное дерево опровержения.
человек(сократ).
смертен(х):-человек(х).
?смертен(х).
Задание№4: Самостоятельное создание базы знаний «Мужские древо»
Создать на языке Пролог-Д базу знаний, описывающую мужское древо некоторой семьи. Составьте запросы к базе знаний, позволяющие выявить:
Дополнительное задание
5: Разберите программу
НОД(х,х,х).
НОД(х,у,ж):-ВЫЧИТАНИЕ(х,у,р),
НОД(х,у,ж):-ВЫЧИТАНИЕ(у,х,л),
ВЫЧИТАНИЕ(х,у,р):-СЛОЖЕНИЕ(р,
ВЫЧИТАНИЕ(у,х,л):-СЛОЖЕНИЕ(х,
?НОД(3,6,ж).
Пример построения дерева опровержения
Пусть дано дерево родства:
Получим Пролог-программу:
отец(Иван,Сидор).
отец(Иван,Яков).
отец(Сидор,Макар).
отец(Яков,Платон).
брат(Х,У):-отец(З,Х),отец(З,У)
дядя(Х,У):-отец(З,У),брат(Х,З)
?брат(Сидор,Х).
?дядя(У,Х).
Дерево опровержения для вопроса «Яков брат ли Сидору?»:
О(и,с),О(и,я),О(с,м),О(я,п),
Б(с,я)
Æ ДА
Дерево опровержения для вопроса «Пётр брат ли Сидору?»:
О(и,с),О(и,я),О(с,м),О(я,п),
Б(с,я)
Нет
Модифицированное дерево для определения братьев Сидора:
О(и,с),О(и,я),О(с,м),О(я,п),
Б(с,я)
Б(с,я)
ПРИЛОЖЕНИЕ.
П1. Арифметика в языке Пролог-Д.
В языке Пролог-Д имеются встроенные предикаты, в частности предикаты арифметики и сравнения. Их описание находится в файле помощи – кнопка или окно Помощь, Язык, Встроенные предикаты, Арифметика. Найдите, откройте и просмотрите его.
Для освоения принципов работы со встроенными арифметическими предикатами и встроенными предикатами сравнения рассмотрим следующие задачи.
Например, выражение Z = X*Y запишется на Прологе в следующем виде :
?УМНОЖЕНИЕ(X,Y,Z).
Задание П1.1. На языке Пролог-Д необходимо описать вычисление объема параллелепипеда высотой h, в основании которого прямоугольник, имеющий стороны длиной a и b.
Известна формула определения объема параллелепипеда:
Vпар=a*b*h.
Предикат, который будет выполнен, если будет вычислен объем параллелепипеда, должен иметь четыре аргумента - длины сторон a и b, высоту h и величину объема. Целесообразно, чтобы Имя предиката отражало его назначение - этому критерию удовлетворит имя объем. Данный предикат будет составным:
объем(a,b,h,V):-УМНОЖЕНИЕ(a,b,
К базе знаний можно задать вопросы:
?объем(10,20,5,V).
ответ системы Пролог-Д:
V=1000.
Как и прежде предикат объем обратим, это означает, что используя это описание можно вычислить не только объем по заданным сторонам и высоте, но и любую (одну) сторону или высоту по заданным высоте, стороне и объему.
Задайте вопрос: ?объем(а,20,5,1000). Ответ : а = 10.
Задание П1.2: Если необходимо вычислить число x=2*3+1, то для этого достаточно набрать на клавиатуре вопрос:
Информация о работе Логическое программирование на языке пролог-д