8.5.1.
Правила поиска в языке PROLOG
Существует аналогия между выражениями вида
admire(Y,
X) :- philosopher (X) , beats (X,Y)
в
языке PROLOG и консеквентной теоремой в системе PLANNER. При запросе "who
admires whom?" ("кто кем восхищается?"), который может быть представлен
в виде фразы
:-
admire(V, W). ,
приведенное
выше выражение интерпретируется следующим образом: "Для того чтобы показать,
что Y восхищается X, покажите, что X является философом, а затем покажите, что
X обогнал Y".
Цель,
которая унифицируется с выражением admire(Y, X), может быть истолкована как вызов
процедуры, а процесс унификации может рассматриваться как механизм передачи
действительных параметров другим литералам, образующим тело процедуры. В данном
случае не имеет значения, являются ли эти "параметры" переменными, как
в представленном примере. Подцели в теле процедуры упорядочены. В языке PROLOG
такое упорядочение называется правилом поиска слева направо.
В PLANNER и ранних системах,
основанных на методе резолюций, цель легко достигается, если в базе данных содержатся
утверждения
philosopher
(zeno) . beats (zeno, achilles).
Тогда
получим ответ
admire
(achilles, zeno).
Если
в базе данных содержится другая информация, касающаяся искомой цели, то программе
может потребоваться выполнить обратный просмотр (backtrack), прежде чем
добраться до цели. Обратный просмотр используется в том случае, когда нужно отменить
присвоение значений переменным, выполненное при обработке некоторой подцели, поскольку
это присвоение приводит к неудаче в обработке поздней подцели. Положим, что база
данных содержит дополнительную фразу
philosopher ( socrates ) .
В
этом случае, если эта формула отыщется прежде, чем формула
philosopher(zeno).,
обработка
следующей подцели приведет к неудаче, а следовательно, нужно будет поискать другого
философа. Объем работы, который придется выполнить системе в процессе достижения
цели admire(V, W), зависит от количества альтернативных вариантов утверждений,
касающихся философов, которые имеются в базе данных.
Предположим, что в базе данных
содержатся факты еще о ста философах, т.е. в ней имеются сто других выражений
в формате philosopher(X), в которых X отличается от zeno. Тогда в худшем случае
программе потребуется 100 раз выполнить обратный просмотр, прежде чем будет найдено
именно то утверждение, которое согласуется с целью.
База данных может содержать
и другие правила, которые взаимодействуют с интересующим нас выражением admire
(V, W). Например, можно положить, что утверждение "X обогнал Y" представляет
транзитивное отношение. В этом случае в нашем распоряжении будет правило
beats(X, Y) :- beats(X,
Z), beatsf Z, Y).
Можно
также дать такое определение понятию "философ", что таковым будет считаться
только тот, кого хотя бы однажды обогнала черепаха:
philosopher(X) :-
beats(Y, X), tortoise(Y).
Наличие
этих правил очень усложнит пространство поиска и значительно увеличит количество
случаев, когда придется выполнять обратный просмотр.
В следующем разделе описано
одно из расширений языка PROLOG— система MBASE, на базе которой реализована программа
МЕСНО для решения задач вузовского курса теоретической механики.
| Maya 3D графика в кино и телевидении Воздействие испытаний ядерного оружия на здоровье населения Объектно-ориентированный язык программирования Java Объектно-ориентированное программирование Delphi Библиотека визуальных компонентов VCL и ее базовые классы Кроссплатформенное программирование для Linux Элементы управления Win32 Элементы управления Windows XP Файлы и устройства ввода/вывода Что такое экспертная система? Объектно-ориентированное программирование Инструментальные средства разработки экспертных систем Программирование на языке CLIPS Критерии и количественные характеристики надежности Расчет характеристик надежности невостанавливаемых резервированных изделий Расчет надежности системы с постоянным резервированием Интегрирование тригонометрических функций ; |