Логическое программирование на языке пролог-д

Автор работы: Пользователь скрыл имя, 20 Января 2014 в 20:15, лабораторная работа

Краткое описание

Языки типа Бейсик – императивные, в них команды определяют действия, которые необходимо выполнить исполнителю алгоритма [Кларк К., Маккейб Ф. Введение в логическое программирование на микро - Прологе.- М. Радио и связь, 1987.-312 с.] Дескриптивные (декларативные) языки определяют набор отношений или функций, которые должны быть выполнены.

Вложенные файлы: 1 файл

Лаб ПРОЛОГ07.doc

— 173.50 Кб (Скачать файл)

Дисциплина

математическая логика и теория алгоритмов

 

 

Лабораторная  работа №2

ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПРОЛОГ-Д

Время: 2 часа.

Место: компьютерный класс

 

Учебные вопросы:

.

  1. Изучение интерфейса и синтаксиса языка логического программирования «Пролог-Д».
  2. Создание базы знаний.

 

Литература  и материальное обеспечение:

 

  1. Методическая разработка по теме занятия.
  2. Класс ПЭВМ.
  3. Конспект лекций по дисциплине «Математическая логика и теория алгоритмов».
  4. Программное обеспечение «Пролог-Д».
  5. Аляев Ю.А. Тюрин С.Ф. Дискретная математика и математическая логика. –  М.: Финансы и статистика, 2006. –357 с.

 

 

 

 

 

 

 

 

 

 

 

 

Краткие сведения из теории

 

Языки типа Бейсик – императивные, в них команды определяют действия, которые необходимо выполнить исполнителю  алгоритма [Кларк К., Маккейб Ф. Введение в логическое программирование на микро - Прологе.- М. Радио и связь, 1987.-312 с.] Дескриптивные (декларативные) языки определяют набор отношений или функций, которые должны быть выполнены.

В логическом программировании [А.Е. Соловьёв Специальная математика. Конспект лекций. Пермь ПГТУ.2003 г. ] программист не только не занимается управлением памятью, но и не управляет вычислениями. (Для логической программы, например, нельзя нарисовать блок-схему).

Логическое программирование не является программированием в традиционном понимании этого слова, поскольку программист в данном случае пишет не программу-алгоритм, а логическую модель. Как правило, такая модель может быть использована для решения не одной, а ряда задач, определенного моделью круга.

Математической основой  логического программирования  является метод резолюций.

Язык Пролог (ПРОграммирование с  помощью ЛОГики) создан А. Колмеройером в 1970 году во Франции, распространен  в Венгрии, Англии, Японии.

Рассмотрим одну из модификаций Пролога – русифицированный Пролог-Д.

 

Программа на Прологе  представляет из себя базу знаний, представленных в виде не содержащих свободных переменных дизъюнктов. Дизъюнкты делятся на факты, правила и вопросы.

В Прологе используются только хорновские дизъюнкты, то есть дизъюнкты, в которых не больше одного не инверсного предиката. В Прологе их называют обычно предложениями или клаузами (дизъюнктами, элементами КНФ).

Правила могут иметь в общем  случае вид  , где

- предикаты,

что при переводе в дизъюнкты  будет 

В Прологе это записывается наоборот:

,

где - называются целями, причём  запятая обозначает конъюнкцию, а в конце ставится точка.

Дизъюнкт, состоящий только из инверсных  предикатов – вопрос, то есть, это -  импликация в 0 :

 В Прологе это записывается так:

В конце – точка.

 А дизъюнкт, состоящий лишь из одно не инверсного  предиката – факт, то есть это импликация из 0:

 В Прологе это записывается  так: 

 В конце – точка.

 

 Описание системы  программирования «Пролог-Д».

 

Система Пролог-Д для Windows. На дискете (в архиве, в рабочей директории) должны быть файлы:

    1. PROLOGW.EXE – транслятор (интерпретатор),
    2. PROLOGW.HLP - справка,
    3. BORLANDMM.DLL – системная библиотека,
    4. CP3245MT.DLL – системная библиотека.

 

1. Интерфейс  и синтаксис логического языка  программирования «Пролог-Д».

 

Интерфейс логического языка программирования «Пролог-Д» аналогичен интерфейсу и приемам работы в операционной системе WINDOWS.

Для начала работы с «Пролог-Д» необходимо зайти в папку под названием «Пролог-Д», расположение которой укажет преподаватель. Затем выбрать ярлык Пролога-Д или с помощью программ просмотра диска найти файл с программой prologw.exe и двойным нажатием левой клавиши мыши инициировать его исполнение. На экране появится заставка системы Пролог-Д Windows (рисунок 1).

 

 

Рисунок 1 Экран  системы Пролог-Д  в MS Windows.

 

Изображенный  на рисунке 1.. интерфейс является стандартным  для систем, работающих в среде Windows. Управлять системой можно с помощью манипулятора мышь, или с помощью специальной клавиатуры Windows.

Падающее меню Файлы.

Система позволяет  работать одновременно с нескольким файлами аналогично работе в ОС WINDOWS.

Элемент меню Исполнение.

Содержит элементы Исполнить, Прервать и Настройки. На рисунке 2 показана панель настроек.

 

 

Рисунок 2. Панель настроек режимов исполнения Пролог-программы.

Отмечая или снимая отметки в соответствующих квадратиках панели настроек можно включить и выключить трассировку, вывод вопроса, поручить системе сохранять текст программы при каждом отладочном запуске, а также выбрать, куда направлять вывод в ходе исполнения программы. Мы не будем пока заниматься настройкой исполнения.

Элемент меню Окна.

При выборе этого  элемента появляется падающее меню. Выбор  элементов меню Каскад, Мозаика, Упорядочить и Свернуть все определяет взаимное расположение окон на экране.

Элемент меню Помощь

При выборе данного  элемента меню пользователю предоставляется  возможность выбор различных  видов помощи, указываемых в падающем меню: помощь о программе и помощь по разделам. Все виды помощи построены по гипертекстовому принципу с использование стандартной подсистемы организации помощи MS Windows(рисунок 3).

 

 

Рисунок 3. Подсистема помощи

Синтаксис языка «Пролог-Д» подробно описан в файле помощи - кнопка или окно Помощь, Язык, Синтаксис. Откройте его и просмотрите.

База  знаний.

Синтаксис: БазаЗнаний ::= {Предложение}*

Предложение::= Факт ¦ Правило ¦ Комментарий

Комментарий::= "{СимволASCII}*"

База знаний на Прологе-Д состоит из множества  фактов и правил.

 

Факты.

Синтаксис:

Факт ::= Предикат.

Предикат ::= Имя(Аргумент{,Аргумент}*) ¦ Имя

Имя ::= БукваСимвол{Символ}* Константа::= Целое ¦ Словосочетание

В данной версии Пролога-Д длина имени предикатного символа не ограничена. Аргументом может быть любой терм. Аргументов может и не быть. Факты описывают  объекты и отношения между  ними. Декларативно Факт P означает, что P безусловно истинно. Процедурно означает, что факт P всегда выполнен.

 

Правила.

Синтаксис: Правило::= Предикат:-Цель{,Цель}*.

Цель ::= Предикат ¦ !

Правило описывает  отношения между объектами. Предикат, стоящий слева от знака импликации :- называется головой, а предикаты, стоящие справа - целями или посылками. Правило может иметь любое число целей. (Правило без целей - это факт). Декларативно правило P0:-P1,..,Pn. читается так:  P0 истинный, если P1, .. , Pn истинны. Процедурно это значит, что для удовлетворения P0 необходимо последовательно удовлетворить P1, .. , Pn.

 

Вопрос.

Синтаксис: Вопрос::= ?Цель{,Цель}*. Процедурно вопрос означает исполнение программы на Прологе-Д.

 

Примечания:

  1. При описании фактов и правил вместо символа “; - точка с запятой“ допускается использование символа “. - точка“.
  2. При описании правил вместо сочетания символов “<-“ допускается использование сочетания символов “:-“.

Будем заканчивать правила  и факты точкой, а в качестве знака импликации использовать символ:-

Задание №1.Программа  «Родство»

Пусть дано дерево родства:


 

Записать и инициировать выполнение программы «Родство», построить  в тетради модифицированное дерево опровержения.

отец(Иван,Сидор).

отец(Иван,Яков).

отец(Сидор,Макар).

отец(Яков,Платон).

брат(Х,У):-отец(З,Х),отец(З,У),НЕ(РАВНО(Х,У)).

дядя(Х,У):-отец(З,У),брат(Х,З).

?брат(Сидор,Х).

?дядя(У,Х).

Задание №2.Программа  «Автомобили»

Записать и инициировать выполнение программы «Автомобили», построить  в тетради модифицированное дерево опровержения.

автомобиль( Сузуки, Япония).

автомобиль (Адмирал, Китай).

автомобиль (Жигули, Россия).

автомобиль (Нива, Россия).

автомобиль (Мерседес, Германия).

автомобиль (Ауди, Германия).

российский(х):-автомобиль(х,Россия).

иномарка(з):-автомобиль(з,Япония).

иномарка(з):-автомобиль(з,Германия).

иномарка(з):-автомобиль(з,Китай).

?российский(у).

Задание №3.Программа  «Сократ»

Записать и инициировать выполнение программы «Родство», построить  в тетради модифицированное дерево опровержения.

человек(сократ).

смертен(х):-человек(х).

?смертен(х).

 

Задание№4: Самостоятельное создание базы знаний «Мужские древо»

Создать на языке Пролог-Д  базу знаний, описывающую мужское  древо некоторой семьи. Составьте  запросы к базе знаний, позволяющие  выявить:

  1. Сына, задав имя отца;
  2. Всех братьев;
  3. Всех внуков и дедов;
  4. Всех племянников и дядей.
  5. Племянников, задав  имя дяди.

Дополнительное задание 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,S),УМНОЖЕНИЕ(S,h,V).

 

К базе знаний можно задать вопросы:

?объем(10,20,5,V).

ответ системы  Пролог-Д:

V=1000.

Как и прежде предикат объем обратим, это означает, что используя это описание можно вычислить не только объем по заданным сторонам и высоте, но и любую (одну) сторону или высоту по заданным высоте, стороне и объему.

Задайте вопрос: ?объем(а,20,5,1000). Ответ : а = 10.

 

Задание П1.2: Если необходимо вычислить число x=2*3+1, то для этого достаточно набрать на клавиатуре вопрос:

Информация о работе Логическое программирование на языке пролог-д