- •Лабораторная работа n 1 основы языка программирования пролог. Изучение среды turbo prolog.
- •Запустить Turbo Prolog
- •1.1 Основные понятия языка Турбо Пролог.
- •1.1.2. Факты
- •1.1. 3 . Запросы
- •1.2. Разделы программы на языке Турбо Пролог.
- •2. Среда turbo prolog 2.0.
- •2.1. Интерфейс среды Турбо Пролог 2.0.
- •2.1 Элементы главного меню и их функции:
- •2.3 Основные операции в среде Турбо Пролог.
- •2. 4 . Трассировка.
- •Лабораторная работа n 2 понятие правила и рекурсии. Встроенные предикаты.
- •1. Правила
- •1.1. Дерево вывода.
- •2. Рекурсия
- •3.Использование встроенных предикатов.
- •4. Задание для лабораторной работы
- •4.1. Варианты заданий
- •5. Контрольные вопросы.
- •Лабораторная работа № 3 интегрированная среда разработки visual prolog
- •1. Создание нового проекта.
- •2. Создание формы.
- •3. Работа с меню
- •4. Создание обработчиков нажатия на кнопку.
- •5. Задание для лабораторной работы
- •6. Контрольные вопросы.
- •2. Преобразование данных
- •3. Арифметические действия
- •Лабораторная работа № 5 построение нейросетевой экспертной системы
- •5.1. Цель работы
- •5.2. Методические указания
- •5.2.1. Постановка задачи
- •5.2.2. Критерии оценки
- •5.2.3. Ввод анализируемых данных
- •5.2.3.1. Использование файла запуска фактов
- •5.2.3.2. Использование протокола dde
- •5.3. Порядок выполнения работы
- •Лабораторная работа №6 Архитектура процессора NeuroMatrix ® nm 6403 и его функциональные возможности
- •6.3.2. Внешний интерфейс процессора
- •6.3.3. Общее описание внутренней структуры процессора
- •6.3.3.1. Описание основных элементов скалярного процессора
- •6.3.3.2. Описание основных элементов векторного процессора
- •6.3.4. Основные вычислительные блоки векторного процессора
- •6.3.4.1. Взвешенное суммирование
- •6.3.4.2. Выполнение операций на векторном алу
- •6.3.4.3 Операция маскирования
- •6.3.4.4 Обработка данных функцией активации
- •6.3.4.5 Циклический сдвиг вправо операнда х при взвешенном суммировании
- •6.3.4.6 Порядок выполнения преобразований над данными на вп
- •6.4. Описание и порядок пользования программой nmCalculator запустить nmCalculator
- •6.4.1 Общие сведения о программе
- •6.4.2 Формирование векторной команды
- •6.4.3 Разбиение рабочей матрицы и запись весовых коэффициентов
- •Контрольные вопросы
- •Лабораторная работа № 7 Программирование процессора NeuroMatrix ® nm 6403
- •7.2.3 Типы скалярных команд
- •7.2.4 Типы векторных команд
- •7.2.5 Регистры процессора
- •7.2.5.1 Основные регистры
- •7.2.5.2 Регистровые пары
- •7.3. Примеры простейших программ
- •7.4. Порядок выполнения работы
Лабораторная работа n 2 понятие правила и рекурсии. Встроенные предикаты.
Цель работы :
изучить понятия правила и рекурсии, встроенные предикаты системы Турбо Пролог, разработать Пролог- программу с использованием фактов и правил.
1. Правила
Правило - это предложение , истинность которого зависит от истинности одного или нескольких предложений . Обычно правило содержит несколько хвостовых целей , которые должны быть истинными для того, чтобы правило было истинным.
Пример. Известно, что бабушка человека - это мама его мамы или мама его папы. Соответствующие правила будут иметь вид:
Бабушка(X,Y):-
Мать (X,Z), Мать (Z,Y).
Бабушка(X,Y):-
Мать (X,Z),Отец (Z,Y).
Символ ": -" означает "если", и вместо него можно писать if.
Символ "," - это логическая связка "и" или конъюнкция, вместо него можно писать and.
Первое правило сообщает, что X является бабушкой Y, если существует такой Z, что X является мамой Z, а Z - мамой Y. Второе правило сообщает, что X является бабушкой Y, если существует такой Z, что X является мамой Z, а Z - папой Y.
1.1. Дерево вывода.
Графическим способом отображения правила является дерево вывода. Оно состоит из вершин и ребер и изображает цели, снимаемые в процессе вычисления. Корень дерева, как правило, совпадает с запросом. Вершины изображают цели, снимаемые в процессе вычисления. Правила, входящие в дерево, обозначаются закрашенным кружком, факты незакрашенным. Деревом вывода для процедуры является совокупность деревьев вывода для отдельных правил в процедуре (рис 2.1).
Рис 2.1. Дерево вывода для правила Бабушка
2. Рекурсия
В отличие от традиционных языков программирования, в которых основным средством организации повторяющихся действий являются циклы, в Turbo Prolog для этого часто используется рекурсия . Она позволяет использовать в процессе определения предиката его самого.
Добавим к нашей программе о родственных связях еще одно отношение - предок . Определим его через отношение родитель . Все отношение можно выразить с помощью двух правил. Первое правило будет определять непосредственных (ближайших) предков, а второе - отдаленных. Будем говорить, что некоторый является отдаленным предком некоторого Z, если между X и Z существует цепочка людей, связанных между собой отношением родитель-ребенок, как показано на рис. 2.2.
Рис 2.2 Пример отношения предок : (А) X - ближайший предок Z ; (Б) X - отдаленный предок Z .
Первое правило простое и его можно сформулировать так:
Для всех X и Z, X - предок Z, если X - родитель Z.
Это непосредственно переводится на Пролог как
предок( X, Z) :- родитель( X, Z).
Второе правило сложнее, поскольку построение цепочки отношений родитель может вызвать некоторые трудности. Один из способов определения отдаленных родственников мог бы быть таким, как показано на рис. 2.3. В соответствии с ним отношение предок определялось бы следующим множеством предложений:
предок( X, Z) :- родитель( X, Z).
предок( X, Z) :- родитель( X, Y), родитель( Y, Z).
предок( X, Z) :- родитель( X, Y1), родитель( Yl, Y2), родитель( Y2, Z).
предок( X, Z) :- родитель( X, Y1), родитель( Y1, Y2), родитель( Y2, Y3), родитель( Y3, Z).
. . .
Рис. 2.3. Пары предок-потомок, разделенные разным числом поколений.
Эта программа длинна и, что более важно, работает только в определенных пределах. Она будет обнаруживать предков лишь до определенной глубины фамильного дерева, поскольку длина цепочки людей между предком и потомком ограничена длиной наших предложений в определении отношения.
Существует, однако, корректная и элегантная формулировка отношения предок - корректная в том смысле, что будет работать для предков произвольной отдаленности. Ключевая идея здесь - определить отношение предок через него самого. Рис 2.3 иллюстрирует эту идею:
Для всех X и Z, X - предок Z, если существует Y, такой, что (1) X - родитель Y и (2) Y - предок Z.
Предложение Пролога, имеющее тот же смысл, записывается так:
предок( X, Z) :- родитель( X, Y), предок( Y, Z).
Теперь мы построили полную программу для отношения предок , содержащую два правила: одно для ближайших предков и другое для отдаленных предков. Здесь приводятся они оба вместе:
предок( X, Z) :- родитель( X, Z).
предок( X, Z) :- родитель( X, Y), предок( Y, Z).
Рис 2.4. Рекурсивная формулировка отношения предок .
Любая рекурсивная процедура должна включать в себя базис и шаг рекурсии.
Базис рекурсии - это предложение, определяющее некую начальную ситуацию или ситуацию в момент прекращения. Как правило, в этом предложении записывается некий простейший случай, при котором ответ получается сразу даже без использования рекурсии. Так, в приведенной выше процедуре, описывающей предикат предок, базисом рекурсии является первое правило, в котором определено, что ближайшими предками человека являются его родители. Это предложение часто содержит условие, при выполнении которого происходит выход из рекурсии или отсечение.
Шаг рекурсии - это правило, в теле которого обязательно содержится, в качестве подцели, вызов определяемого предиката. Если мы хотим избежать зацикливания, определяемый предикат должен вызываться не от тех же параметров, которые указаны в заголовке правила. Параметры должны изменяться на каждом шаге так, чтобы в итоге либо сработал базис рекурсии, либо условие выхода из рекурсии, размещенное в самом правиле. В общем виде правило, реализующее шаг рекурсии, будет выглядеть так:
<имя определяемого предиката>:-
[<подцели>],
[<условие выхода из рекурсии>],
[<подцели>],
<имя определяемого предиката>,
[<подцели>].
