- •Методические указания к выполнению лабораторных работ
- •Лабораторная работа «Установка и проверка работы Visual Prolog»
- •ПрОграммирование в лоГике
- •Описание окон Visual Prolog, перечень окон
- •Задание Создание проекта и настройка компилятора
- •Запуск и тестирование работы программы
- •Вопросы для самоконтроля
- •Лабораторная работа «Создание программы с использованием предложений, предикатов, доменов и целей. Создание составных целей»
- •Файлы используемые в проекте
- •Структура программы на Visual Prolog
- •Создание программы на языке Visual Prolog
- •1. В первую очередь необходимо определить факты.
- •2. Необходимо определить правила
- •3. После определения предложений необходимо сформулировать цель на языке Пролог
- •3. Далее в разделе предикатов необходимо описать пользовательские предикаты. Это можно сделать двумя способами
- •Задание Создание программы с использованием предложений, предикатов, доменов и целей
- •Организация запросов
- •Вопросы для самоконтроля
- •Лабораторная работа «Создание составных целей с конъюнкцией и дизъюнкцией»
- •Сложная цель с конъюнкцией и дизъюнкцией
- •Задание Внесение правил
- •Настроить проект как в лабораторной работе №1. * применить к каждой лабораторной работе
- •Организация запросов
- •Лабораторная работа «Использование отладчика приложения для составления целевого дерева»
- •Унификация и поиск с возвратом
- •Поиск с возвратом
- •Детальный поиск с возвратом
- •Задание
- •Создание программы
- •Использование отладчика приложения (Debugger)
- •Вопросы для самоконтроля
- •Лабораторная работа «Управление поиском решения»
- •Управление поиском решений
- •Прерывание поиска с возвратом (отсечение)
- •Использование предиката Fail
- •Предотвращение поиска с возвратом к предыдущей подцели в правиле
- •Использование предиката Not
- •Задание Создание программы поиска с предикатами !, not
- •Лабораторная работа «Организация пользовательского меню»
- •Детерминизм и отсечение
- •Использование правил для условного ветвления
- •Задание
- •Вопросы для самоконтроля
- •Лабораторная работа «Составные объекты»
- •Простые и составные объекты
- •Простые объекты данных
- •Составные объекты данных и функторы
- •Унификация составных объектов
- •Объявление составных доменов
- •Задание
- •Создание программы
- •Вопросы для самоконтроля
- •Лабораторная работа «Списки»
- •Задание
- •Вопросы для самоконтроля
- •Используемая литература
Использование предиката Not
Показать не сексуальные и недорогие машины:
buy_car(_,Color):-
car (_, _, Price) ,
not(colors(Color,sexy)),
Price < 25000.
Предикат not будет успешным, если не может быть доказана истинность данной подцели.
Это приводит к предотвращению связывания внутри not несвязанных переменных. При вызове изнутри not подцели со свободными переменными, Visual Prolog возвратит сообщение об ошибке: "Free variables not allowed in not or retractall" (Свободные переменные не разрешены в not или retract). Это происходит вследствие того, что для связывания свободных переменных в подцели, подцель должна унифицироваться с каким-либо другим предложением и выполняться. Правильным способом управления несвязанными переменными подцели внутри not является использование анонимных переменных.
Примеры использования.
Пример 1.
predicates
likes (symbol,symbol)
name (symbol)
clauses
likes (doli,tenis).
likes (elen,tenis).
likes (elen,reading).
name (Name):-likes (Name,A),A<>"reading".
goal
name (Name).
Результат.
Name=doli
Name=elen
2 Solutions
Пример 2.
predicates
likes (symbol,symbol)
name (symbol)
clauses
likes (doli,tenis).
likes (elen,tenis).
likes (elen,reading).
name (Name):-likes (Name,A), A<>"reading", likes (Name1,reading), Name<>Name1.
goal
name (Name).
Результат.
Name=doli
1 Solution
Пример 3.
predicates
likes (symbol,symbol)
name (symbol)
clauses
likes (doli,tenis).
likes (elen,tenis).
likes (elen,reading).
name (Name):-likes (Name,A),not(A="reading").
goal
name (Name).
Результат.
Name=doli
Name=elen
2 Solutions
Пример 4.
predicates
likes (symbol,symbol)
name (symbol)
clauses
likes (doli,tenis).
likes (elen,tenis).
likes (elen,reading).
name (Name):-likes (Name,A),not(A="reading"),likes (Name2,reading),Name<>Name2.
goal
name (Name).
Результат.
Name=doli
1 Solution
Задание Создание программы поиска с предикатами !, not
Запустить среду визуальной разработки Visual Prolog.
Создать программу, определяющую студентов сдавших все экзамены на положительную оценку:
domains% раздел доменов
name, predmet = symbol % домены имя и предмет – символьные
oz = integer% домен оценка – числовое, целое
predicates% раздел предикатов
perevod(name) % задание предиката студент-переводник
us (oz) % задание предиката оценка
pred (predmet) % задание предиката предмет
ucp (name, predmet, oz) % задание предиката успеваемость с указанием имени студента, предмета и оценки полученной по этому предмету
clauses % раздел предложений
p
предикаты перечень студентов-переводников
perevod(lysha).
u
s
(2).
u
предикаты перечень оценок
us (4).
us (5).
p
red
(matem).
p
предикаты перечень предметов
pred (ictoria).
u
cp
(pasha,matem,5).
ucp (pasha, ryc,5).
ucp (pasha, ictoria ,5).
ucp (lysha,matem,3).
ucp (lysha, ryc,2).
ucp (lysha,ictoria ,2).
ucp (olga,matem,2).
ucp (olga, ryc,3).
u
предикаты успеваемости студентов и
студентов-переводников
ucp (misha, matem,4).
ucp (misha,ryc ,2).
ucp (misha, ictoria,3).
ucp (dina, matem,4).
ucp (dina, ryc,4).
ucp (dina, ictoria,2).
ucp (masha, matem,4).
ucp (masha, ryc,4).
ucp (masha, ictoria,5).
goal % раздел целей (запросов)
u
Цель: показать студента успевающего
по всем предметам
ucp (Stud,ryc,Ryc),Ryc<>2,
ucp (Stud,ictoria,Ictoria),Ictoria<>2.
Сохранить файл с именем lab4.
Организовать несколько целей с подцелями с конъюнкцией, дизъюнкцией.
Преобразовать программу, добавив прерывание с зеленым отсечением:
stud(Stud):-ucp (Stud,Predmet,Oz),
Oz<>2,
Predmet= matem,
!;
ucp (Stud,Predmet,Oz),
Oz<>2,
Predmet=ryc,
!;
ucp (Stud,Predmet,Oz),
Oz<>2,
Predmet=ictoria.
Организовать цель:
stud(Stud). % показать всех успевающих студентов
Показать всех студентов не переводников успевающих по предмету история (использовать стандартный предикат not). Добавить в программу:
stud(Stud):-ucp (Stud,ictoria,Oz),
Oz=5,
not(perevod(Stud)).
Вопросы для самоконтроля
Опишите механизм прерывания поиска с возвратом.
Опишите красное и зеленое отсечение при организации поиска решения.
Опишите условия делающие поиск решения детерминированным и недетерминированным.
Опишите условия использования предикат fail.
Опишите условия использования предикат !.
Опишите условия использования предикат not.
Опишите условия использования предикат cut.
