ВУЗ:
Составители:
Рубрика:
20
На самом деле БД Пролога включает не только факты, но и правила.
Факты и правила представляют собой не множество, а список. Для получения
ответа БД просматривается по порядку, то есть в порядке следования фактов
и предикатов в тексте программы.
Цель достигнута, если в БД удалось найти факт или правило, который
(которое) удовлетворяет предикату цели, то есть превращает его в истинное
высказывание. В нашем примере первую подцель удовлетворяют факты
отец( иван, анна). и отец( иван, юлия). Вторую подцель удовлетворяет факт
мать( анна, петр). Следовательно, главная цель удовлетворена, переменная
X связывается с константой анна.
Третьим типом предложения является правило. Правило позволяет
вывести
один факт из других фактов. Иными словами, правило – это
заключение, для которого известно, что оно истинно, если одно или
несколько других найденных заключений или фактов являются истинными.
Правила – это предложения вида
H: - P
1
, P
2
,…, P
n
.
Символ «: -» читается как «если», предикат H называется заключением,
а последовательность предикатов P
1
, P
2
,…, P
n
называется посылками.
Приведенное правило является аналогом хорновского дизъюнкта H
∨
¬
P
1
∨¬
P
2
,…,
∨¬
P
n
. Заключение истинно, если истинны все посылки. В посылках
переменные связаны квантором существования, а в заключении - квантором
всеобщности.
Пример 16.
Добавим в БД примера 15 правила, задающие отношение «дед»:
мать( мария, анна).
мать(мария, юлия).
мать( анна, петр).
отец( иван, анна).
отец( иван, юлия).
дед (X, Y): - отец(X, Z), мать(Z, Y).
дед (X, Y): - отец(X, Z), отец(Z, Y).
Тогда вопрос, является
ли иван дедом петра, можно задать в виде
следующей цели:
Цель: дед( иван, петр).
Правила - самые общие предложения Пролога, факт является частным
случаем правила без правой части, а цель – правило без левой части.
Все предложения для одного предиката связаны между собой
отношением «или».
Очень часто правила в Прологе являются рекурсивными.
Например, для
нашей семейной БД предикат «предок» определяется рекурсивно:
предок(x, y): - мать(x, y).
предок(x, y): - отец(x, y).
предок(x, y): - мать(x, z), предок(z, y).
предок(x, y): - отец (x, z), предок(z, y).
Страницы
- « первая
- ‹ предыдущая
- …
- 18
- 19
- 20
- 21
- 22
- …
- следующая ›
- последняя »