Перейти к основному содержанию
Рецепты Linux

Main navigation

  • Основы
  • Система
  • Команды
  • Программы
  • Дистро
  • Интерфейсы
  • Устройства
  • Доки
User account menu
  • Войти

Строка навигации

  1. Главная
  2. Практическая информатика
  3. Глава 10 Логическое программирование

Правила

Кроме фактов программы на языке Пролог могут содержать правила, позволяющие получать дополнительные знания о том мире, который описывает программа. Правило задает новый предикат через определенные ранее.

Правило состоит из головы (предиката) и тела (последовательности предикатов, разделенных запятыми). Голова и тело разделены знаком :- и, подобно каждой фразе Пролога, правило должно заканчиваться точкой. Запятая в теле правила означает конъюнкцию (&&, логическое и).

Знак :- есть схематическая запись стрелки (<-) и показывает, что из правой части следует левая. Этот знак читается как "если". Интуитивный смысл правила состоит в том, что цель, являющаяся головой, будет истинной, если Пролог сможет показать, что все выражения (подцели) в теле правила являются истинными.


Пример
Правило, определяющее отношение ребенок/2 через отношение отец/2, запишется следующим образом:

ребенок(X, Y) :- отец(Y, X).

Это означает, что если человек Y является для человека X отцом, то X является ребенком Y. Здесь X и Y - переменные. Напомним, что запись ребенок/2 показывает, что предикат ребенок является функцией от двух аргументов.


Пример
Определим отношение мать/2 через отношения родитель/2 и женщина/1 следующим образом: матерью X для человека Y является его родитель женского рода.

мать(X, Y) :- родитель(X, Y), женщина(X).

Предикаты отличаются друг от друга не только именем, но и количеством аргументов. Можно, например, определить отношение мать/1 следующим образом:

мать(X) :- родитель(X, _), женщина(X).

Так как нам в данном предикате не важно, чьим родителем является данная женщина, то мы использовали анонимную переменную.

?- мать(X, Y).
X=анна
Y=юлия
Yes

?- мать(X).
X=анна
Yes


Пример
Определим отношение дедушка/2:

дедушка(X, Y) :- отец(X, Z), отец(Z, Y).
дедушка(X, Y) :- отец(X, Z), мать(Z, Y).

Эти правила утверждают, что дедушкой X для человека Y является отец человека Z, который в свою очередь является отцом или матерью человека Y.


Задания

  1. Создайте файл, содержащий следующую базу данных:
    (скопировать файл)
    женщина(анна). мужчина(борис). 
    женщина(юлия).	 мужчина(олег). 
    женщина(галина). мужчина(антон). 
    женщина(елена). мужчина(павел).
    
    родитель(борис,павел). % кто чей
    родитель(анна,юлия). родитель(анна,антон).
    родитель(анна,борис). родитель(олег,юлия).
    родитель(олег,антон). родитель(олег,борис).
    родитель(галина,анна). родитель(галина,елена).
    
  2. Добавьте правила, задающее отношения отец/2, мать/2, мать/1 и дедушка/2, после чего сформулируйте запросы, определяющие всех матерей и дедушек в данной базе.
  3. Определите отношение сестра/2 через отношения родитель/2 и женщина/1.
  4. Сформулируйте правило, определяющее отношение тетя/2 через отношения родитель/2 и сестра/2.

Перекрёстные ссылки книги для Правила

  • Унификация
  • Вверх
  • Рекурсивные процедуры

Book navigation

  • Содержание
  • Глава 1 Основы информатики
  • Глава 2 Операционные системы и сети
  • Глава 3 Графика на компьютере
  • Глава 4 Обработка текста
  • Глава 5 Основы языка HTML
  • Глава 6 Динамический HTML
  • Глава 7 Простейшие вычисления
  • Глава 8 Системы компьютерной алгебры
  • Глава 9 Модели и программирование
  • Глава 10 Логическое программирование
    • Классическая логика и язык Пролог
    • Термы и объекты
    • Факты
    • Запросы к базе данных
    • Унификация
    • Правила
    • Рекурсивные процедуры
    • Базы знаний
    • Решение логических задач
    • Арифметические выражения
    • Примеры программ
    • Списки
  • Глава 11 Введение в ООП
  • Глава 12 Программирование и интернет

Последние материалы

  • Эмулятор терминала Terminator
    4 hours ago
  • Приложение scanimage
    6 days 1 hour ago
  • Утилита sensors
    1 week 2 days ago
  • Сканер Rkhunter
    2 weeks 3 days ago
  • Программа resize2fs
    3 weeks 2 days ago
RSS feed

Secondary menu

  • О проекте

© 2008–2025 Олег Меньшенин mensh@yandex.ru