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

Main navigation

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

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

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

Унификация

Унификация есть основной механизм обработки запросов в логическом программировании. После того как пользователь посылает запрос интерпретатору, этот запрос активизируется. Интерпретатор приступает к анализу фраз базы данных в поисках первой фразы, заголовок которой будет унифицироваться с запросом. Для того чтобы запрос унифицировался с заголовком фразы, необходимо совпадение у них имени предиката, количества аргументов и унификация каждого из них.

Унификация термов, которыми являются аргументы, описывается приводимыми ниже правилами. В примерах используется предикат =, который пытается унифицировать свои аргументы.
1) Переменная унифицируется с атомом или составным термом. В результате этого переменная становится конкретизированной, т. е. принимает значение данного атома или терма.

?- X=коля.
X=коля
Yes

2) Переменная унифицируется с переменной, при этом они обе становятся как бы одной и той же переменной.

?- X=Y.
X = _G161
Y = _G161
Yes

3) Анонимная переменная унифицируется с любым термом.

?- автор(пушкин)=_.
Yes

4) Атом унифицируется с атомом, если они идентичны.

?- коля=коля.
Yes

5) Составной терм унифицируется с другим составным термом, если их имена и количество аргументов совпадает, а аргументы поддаются унификации.

?- отец(борис)=отец(X).
X = борис 
Yes
?- дедушка(борис, Y)=отец(X).
No


Пример
Термы больше(Х, собака) и больше(осел, собака) унифицируются, потому что переменная X может быть конкретизирована атомом осел:

?- больше(Х,собака) = больше(осел,собака).
X = осел
Yes

Рассматриваемый в следующем примере запрос не будет успешным, потому что переменная X не может быть конкретизирована двумя значениями 1 и 2 одновременно.

?- p(X,2,2) = p(1,Y,X).
No

Если в этом примере вместо X мы используем анонимную переменную _, то унификация будет возможна, потому что при каждом использовании _ создается новая переменная. Смысл анонимности в том, что мы предоставляем Прологу возможность генерации имени для данной переменной и нам не нужны ни ее имя, ни ее значение. Переменная Y во время унификации конкретизируется значением 2:

?- p(_,2,2) = p(1,Y,_).
Y = 2
Yes


Пример
В следующем запросе унификация возможна, хотя и нет специфических переменных, которые могли бы быть связаны или унифицированы (как в предыдущих примерах):

?- f(a,g(X,Y)) = f(X,Z), Z = g(W,h(x)).
X = a
Y = h(x)
Z = g(a, h(x))
W = a
Yes

Перекрёстные ссылки книги для Унификация

  • Запросы к базе данных
  • Вверх
  • Правила

Book navigation

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

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

  • Эмулятор терминала Terminator
    1 hour 44 minutes ago
  • Приложение scanimage
    5 days 23 hours 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