- •2.2.2.1 Вызов Турбо-Пролога и главное меню системы
- •2.2.3 Редактор Турбо-Пролога
- •2.2.3.1 Создание и редактирование программного файла
- •3 Лекция №2. Элементы и конструкции языка Турбо-Пролог
- •3.1 Основные вопросы
- •3.2 Текст лекции
- •3.2.1.1 Имена (идентификаторы)
- •3.2.2.1 Предикаты
- •3.2.2.2 Факты
- •3.2.2.3 Правила
- •3.2.2.4 Цели
- •4 Лекция №3. Объекты данных. Константы, переменные, структуры, списки.
- •4.1 Основные вопросы
- •4.2 Текст лекции
- •Стандартные типы доменов Турбо-Пролога
- •4.2.2.1 Константы
- •4.2.2.2 Переменные
- •4.2.2.3 Структуры
- •4.2.2.3 Списки
- •5 Лекция №4. Структура программы на Турбо-Прологе
- •5.1 Основные вопросы
- •5.2 Текст лекции
- •5.2.2 Структура программы на Турбо-Прологе – до 10 мин.
- •5.2.3.1 Раздел опций компилятора
- •5.2.3.2 Раздел констант
- •5.2.3.3 Раздел доменов
- •5.2.3.4 Раздел предикатов
- •5.2.3.5 Раздел утверждений
- •5.2.3.6 Раздел дбд
- •5.2.3.7 Раздел целей
- •6 Лекция №5. Унификация и поиск с возвратом: программа с фактами
- •6.1 Основные вопросы
- •6.2 Текст лекции
- •7 Лекция №6. Унификация и поиск с возвратом: программа с фактами и правилом
- •7.1 Ключевые (основные) вопросы (моменты)
- •7.2 Текст лекции
- •8 Лекция №7. Унификация и поиск с возвратом: программа с фактами и несколькими правилами
- •8.1 Основные вопросы
- •8.2 Текст лекции
- •9 Лекция №8. Вопросно-ответные системы
- •9.1 Основные вопросы
- •9.2 Текст лекции
- •10 Лекция №9. Средства отладки в Турбо-Прологе
- •10.1 Основные вопросы
- •10.2 Текст лекции
- •/*Программа 5 */
- •11 Лекция №10. Простейший ввод-вывод. Окна.
- •11.1 Основные вопросы
- •11.2 Текст лекции
- •11.2.1 Простейший ввод-вывод
- •11.2.2 Окна
- •12 Лекция №11. Управление поиском решений: предикаты отсечения и возврата
- •12.1 Основные вопросы
- •12.2 Текст лекции
- •/* Программа 5 */
- •Vse_reshenia:-roditel(X,y), write(X, "родитель", y), nl, fail.
- •Vita - родитель sasha
- •/* Программа 6 */
- •/* Программа 7 */
- •13 Лекция №12. Арифметика в Турбо-Прологе. Рекурсия.
- •13.1 Основные вопросы
- •13.2 Текст лекции
- •/* Программа 8 */
- •/* Программа 9 */
- •14 Лекция №13. Динамические базы данных
- •14.1 Основные вопросы
- •14.2 Текст лекции
- •/* Программа работы с дбд*/
- •15 Лекция №14. Работа со списками
- •15.1 Основные вопросы
- •15.2 Текст лекции
- •/* Программа 10*/
- •/* Программа 11 */
- •/* Программа 12 */
- •16 Лекция №15. Экспертные системы
- •16.1 Основные вопросы
- •16.2 Текст лекции
- •/* Программа эс*/
7 Лекция №6. Унификация и поиск с возвратом: программа с фактами и правилом
Время: 2 часа (90 мин.)
7.1 Ключевые (основные) вопросы (моменты)
- обработка фактов и правил.
7.2 Текст лекции
Введем теперь в программу-1 новый предикат, выражающий отношение “ребёнок”:
rebenok (person, person)
Однако в разделе clauses не будем перечислять все факты, соответствующие этому отношению. Используем то обстоятельство, что отношение “ребёнок” обратно отношению “родитель”, которое уже определено в программе предикатом roditel. Тогда соответствующее утверждение для отношения “ребёнок” можно определить на Турбо-Прологе, как правило:
rebenok(Y, X) :- roditel(X, Y).
Правило состоит из двух частей, разделенных знаком “:-”. Правая часть правила, называемая телом правила содержит условие, логическим следствием которого является выражение, располагающееся в левой части правила. Левую часть правила называют головой правила. Если условие roditel(X, Y) выполнено, то выполняется и утверждение rebenok(Y, X).
Ниже представлена программа-2, являющаяся расширением программы-1 за счет введения предиката и правила, выражающего отношение “ребёнок”:
/* Программа 2 */
domains
person = symbol
predicates
roditel(person, person)
rebenok(person, person)
clauses
roditel(ola,sasha).
roditel(vita,sasha).
roditel(vita,kata).
roditel(sasha,ana).
roditel(sasha,vera).
roditel(vera,kola).
rebenok(Y, X) :- roditel(X, Y).
Проанализируем теперь, как работает введённое правило. Зададим программе вопрос “Является ли kata ребёнком vita? ”:
Goal: rebenok(kata, vita)
Поскольку в программе нет фактов с предикатом rebenok, Турбо-Пролг обращается к соответствующему правилу. В результате унификации вопроса с головой правила, переменные Y и X будут конкретизированы, т.е. примут значения kata(Y=kata) и vita(X=vita). В силу этого само правило принимает следующий частный вид:
rebenok (kata, vita):- roditel(vita,kata).
Далее Турбо-Пролог будет решать задачу, определяемую правой частью правила (т.е. определять выполнение условий, определяемых в теле правила):
roditel(vita, kata).
Просматривая факты раздела clauses программы, Турбо-Пролог устанавливает наличие факта roditel(vita, kata) и на поставленный исходный вопрос отвечает YES.
Зададим теперь нашей программе следующий вопрос “Ктo дети vita?”:
Goal:rebenok(Kto, vita)
В данном случае, после унификации вопроса с головой правила, оно примет следующий частный вид:
rebenok (Kto, vita):-roditel(vita, Kto).
Далее Турбо-Пролог решает задачу определяемую, правой частью правила:
roditel(vita, Kto).
Сопоставление данного вопроса (задачи) с фактами из раздела clauses программы дает два ответа:
Kto=sasha
Kto=kata
2 Solutions
Аналогично можно спросить “Чей ребенок sasha?”:
Goal:rebenok(sasha, X)
После унификации соответствующее правило принимает следующий частный вид:
rebenok(sasha, X):-roditel(X, sasha).
Решая задачу из правой части правила, Турбо-Пролог выдаст два ответа:
X=ola
X=vita
2 Solutions