Файл: Технология разработки нерекурсивных правил Задание.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.12.2023
Просмотров: 34
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
PREDICATES
nondeterm фигура (symbol, symbol, symbol, integer, integer)
nondeterm атака (symbol, symbol, symbol, integer, integer, symbol, symbol, integer, integer)
CLAUSES
% фигуры
фигура (пешка, п1, черный, 6, 6). %факт 1
фигура (пешка, п2, черный, 4, 5). %факт 2
фигура (пешка, п3, белый, 8, 4). %факт 3
фигура (пешка, п4, белый, 3, 3). %факт 4
фигура (конь, кн1, черный, 1, 7). %факт 5
фигура (конь, кн2, белый, 2, 6). %факт 6
фигура (слон, с1, черный, 5, 7). %факт 7
фигура (слон, с2, белый, 6, 4). %факт 8
фигура (ладья, л1, белый, 8, 5). %факт 9
фигура (ладья, л2, черный, 3, 4). %факт 10
фигура (ладья, л3, белый, 4, 1). %факт 11
фигура (ферзь, ф1, черный, 4, 8). %факт 12
фигура (король, кр1, черный, 6, 8). %факт 13
фигура (король, кр2, белый, 5, 1). %факт 14
% атака
атака (ладья, л1, белый, 8, 5, п2, черный, 4, 5). %факт 15
GOAL
атака (ладья, л1, белый, 8, 5, п2, черный, 4, 5). %запрос 9
Ладья с обозначением л1 белого цвета, стоящая в поле с координатами 8-5, может взять фигуру с обозначением п2 черного цвета, стоящую на поле с координатами 4-5.
Разработка и тестирование варианта программы с безусловными утверждениями (фактами)
Для реализации разработанной логической модели необходимо ввести пользовательскую структуру, содержащую аргументы: название атакующей фигуры – ладья, ее обозначение, цвет и координаты, обозначение второй фигуры, ее цвет и координаты.
Присвоим этой структуре имя атака, определим её и тип её аргументов в области предикатов.
Дополним базу фактов и правил 15-м фактом, определяющим атаку ладьей л1 фигуры п2.
№ | Запросы | Формулировки запросов |
9 | атака (ладья, л1, белый, 8, 5, п2, черный, 4, 5). | Может ли ладья с обозначением л1 белого цвета, стоящая на поле с координатой по горизонтали 8 и координатой по вертикали 5 атаковать фигуру с обозначением п2 черного цвета, стоящую на поле с координатой по горизонтали 4 и координатой по вертикали 5? |
10 | фигура (ладья, л1, белый, 8, 5), фигура (пешка, п2, черный, 4, 5). | Содержится ли на поле одновременно фигура с наименованием ладья, обозначением л1, цветом белый, координатой по горизонтали 8 и координатой по вертикали 5 и фигура с наименованием пешка, обозначением п2, цветом черный, координатой по горизонтали 4 и координатой по вертикали 5? |
Результат выполнения запроса к программе:
№ | Запросы | Формулировки запросов |
9 | yes | факт 15. |
10 | yes | факты 9 и 2. |
Выполнение запроса 9 в программе контролирует правильность функционирования левой части правила логической модели, то есть контролирует утверждение. Запрос 10 проверяет работоспособность правой части правила логической модели, то есть контролирует условие.
Разработка и тестирование варианта с частными правилами (правила с константами)
В программе перейдем от факта 15 и запросов 9-10 к соответствующему частному правилу 1.
PREDICATES
nondeterm фигура (symbol, symbol, symbol, integer, integer)
nondeterm атака (symbol, symbol, symbol, integer, integer, symbol, symbol, integer, integer)
CLAUSES
% фигуры
фигура (пешка, п1, черный, 6, 6). %факт 1
фигура (пешка, п2, черный, 4, 5). %факт 2
фигура (пешка, п3, белый, 8, 4). %факт 3
фигура (пешка, п4, белый, 3, 3). %факт 4
фигура (конь, кн1, черный, 1, 7). %факт 5
фигура (конь, кн2, белый, 2, 6). %факт 6
фигура (слон, с1, черный, 5, 7). %факт 7
фигура (слон, с2, белый, 6, 4). %факт 8
фигура (ладья, л1, белый, 8, 5). %факт 9
фигура (ладья, л2, черный, 3, 4). %факт 10
фигура (ладья, л3, белый, 4, 1). %факт 11
фигура (ферзь, ф1, черный, 4, 8). %факт 12
фигура (король, кр1, черный, 6, 8). %факт 13
фигура (король, кр2, белый, 5, 1). %факт 14
% атака
атака (ладья, л1, белый, 8, 5, п2, черный, 4, 5) :-
фигура (ладья, л1, белый, 8, 5),
фигура (пешка, п2, черный, 4, 5). % правило 1
GOAL
атака (ладья, л1, белый, 8, 5, п2, черный, 4, 5). %запрос 11
По критерию наличие или отсутствие переменных в качестве аргументов в правилах их можно классифицировать на три группы.
Правила, не содержащие переменных в качестве аргументов структур. Аргументами в них могут быть константы (атомы и числа), списки с константами, вложенные структуры без переменных. Назовем эти правила частными.
Правила, содержащие одновременно как переменные, так и константы, списки с константами, вложенные структуры без переменных.
Правила, содержащие в качестве аргументов лишь переменные. В этих правилах отсутствуют константы, списки с константами, вложенные структуры без переменных. Назовем эти правила универсальными.
Результаты выполнения запросов к программе:
№ | Запросы | Результаты выполнения | Используемые факты и правила |
11 | атака (ладья, л1, белый, 8, 5, п2, черный, 4, 5). | yes | правило 1, факты 9 и 2. |
12 | атака (ладья, л2, черный, 3, 4, с2, белый, 6, 4). | no | факты 1-14, правило 1. |
Анализ результатов выполнения запросов 11-12 показывает, что частные правила обеспечивают правильное функционирование лишь в частных случаях, соответствующих этим правилам. Правильное функционирование программы для всех вариантов требует перехода к универсальным правилам, то есть необходима замена констант в правилах на переменные.
Разработка и тестирование варианта с универсальными правилами
Заменим атомы с обозначением фигур, их цветов и координат на соответствующие именованные переменные.
Введем новую пользовательскую структуру для проверки возможности хода и назовем ее ход, которая в качестве аргументов будет содержать координаты атакующей ладьи и атакованной фигур. Определим ее и тип аргументов в области предикатов.
Также введем пользовательскую структуру проверка_беспрепятственной_атаки для проверки на то, что между атакующей ладьей и атакованной фигурой нет других фигур (по правилам шахмат).
Добавим в правила условия для устранения избыточности.
PREDICATES
nondeterm фигура (symbol, symbol, symbol, integer, integer)
nondeterm атака (symbol, symbol, symbol, integer, integer, symbol, symbol, integer, integer)
nondeterm ход (integer, integer, integer, integer)
nondeterm проверка_беспрепятственной_атаки (integer, integer, integer, integer)
CLAUSES
% фигуры
фигура (пешка, п1, черный, 6, 6). %факт 1
фигура (пешка, п2, черный, 4, 5). %факт 2
фигура (пешка, п3, белый, 8, 4). %факт 3
фигура (пешка, п4, белый, 3, 3). %факт 4
фигура (конь, кн1, черный, 1, 7). %факт 5
фигура (конь, кн2, белый, 2, 6). %факт 6
фигура (слон, с1, черный, 5, 7). %факт 7
фигура (слон, с2, белый, 6, 4). %факт 8
фигура (ладья, л1, белый, 8, 5). %факт 9
фигура (ладья, л2, черный, 3, 4). %факт 10
фигура (ладья, л3, белый, 4, 1). %факт 11
фигура (ферзь, ф1, черный, 4, 8). %факт 12
фигура (король, кр1, черный, 6, 8). %факт 13
фигура (король, кр2, белый, 5, 1). %факт 14
% атака
атака (ладья, Л1, Цвет1, X1, Y1, Ф, Цвет2, X2, Y2) :-
фигура (ладья, Л1, Цвет1, X1, Y1),
фигура ( _, Ф, Цвет2, X2, Y2),
Цвет1<>Цвет2,
ход (X1, Y1, X2, Y2). %правило 1
% ход
ход (X0, Y0, X, Y) :- Y=Y0, X0<>X,
not(проверка_беспрепятственной_атаки (X0, Y0, X, Y)). %правило 2
% проверка на отсутствие других фигур между атакующей и взятой фигурой
проверка_беспрепятственной_атаки (X0, Y0, X, Y) :-
фигура (_, _, _, Xf, Yf),
Yf=Y0, Yf=Y, Xf>X0, Xf
фигура (_, _, _, Xf, Yf),
Yf=Y0, Yf=Y, Xf
GOAL
атака (ладья, Л, Цвет, _, _, Ф, _, X2, Y2). %запрос 13
Результаты выполнения запроса 13 к программе:
№ | Запросы | Результаты выполнения | Используемые факты и правила |
11 | атака (ладья, Л, Цвет, Ф, X2, Y2). | Л=л1, Цвет=белый, Ф=п2, X2=4, Y2=5 Л=л2, Цвет=черный, Ф=с2, X2=6, Y2=4 2 Solution | правила 1, 2, 3, факты 2, 8, 9, 10 |