Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


П ОИСК В Ш ИРИНУ И Э ВРИСТИЧЕСКИЙ П ОИСК



Как было показано выше, поиск в глубину осуществляется пу-
тем обхода дерева вывода сверху вниз до завершения - успешного
или неудачного. Только после этого можно подняться вверх по де-
реву и, если поиск был неудачным, попытаться выбрать следующую
ветвь, а затем спуститься по ней вниз (отсюда и название поиска
" в глубину" ). В Прологе алгоритм поиска реализован по прин-
ципу " в глубину", поскольку новые цели добавляются в качало







212


списка ЦЕЛИ. А что бы произошло, если бы цели добавлялись в
конец списка? Тогда, вместо того чтобы продвигаться вниз по
уровням, мы сначала перебирали бы все альтернативные предло-
жения, т.е. обходили бы все узлы данного уровня и лишь потом
спускались уровнем ниже. Другими словами, мы не прорабатывали
бы одно решение на всю глубину, а параллельно пытались бы реа-
лизовать альтернативные решения. Конечно, это более длинный
путь, но и такой подход имеет свои преимущества. При поиске в
глубину можно успеть продвинуться достаточно глубоко перед
тем, как вы потерпите неудачу. При поиске в ширину исключается
возврат.

На заре создания ИИ поиск представлял собой одну из глав-
ных областей исследования. В то время были разработаны алго-
ритмы обхода дерева на основе эвристических правил, которые
зависели от конкретной прикладной области. Например, в шахмат-
ной игре для каждой позиции возможно множество вариантов
продолжения. Количество ветвей из заданного узла дерева вывода
огромно, и для нахождения решения (а это выигрышная позиция)
каждую ветвь нужно проработать на достаточную глубину, так как
число вероятных ходов велико. Поэтому поиск в глубину в данном
случае будет неэффективным. Применяя поиск в ширину, мы мо-
жем анализировать все возможные продолжения позиции на ход-
два вперед. Но и тогда вряд ли возможно просмотреть все вари-
анты в отведенное время. Требуется некоторый способ выбора
потенциально хорошего пути обхода дерева. Чтобы избежать заве-
домо неудачных ходов, можно применить, например, такое прави-
ло: " Предпочтение отдавайте ходам, ведущим к усилению вашей
позиции в центре доски". Подобные правила в большей степени
приходят с опытом, чем как результат изучения теории шахмат-
ной игры. Эти правила называются эвристическими. Они позволя-
ют управлять поиском, делая последний более эффективным. С по-
мощью так называемого алгоритма формирования весов ( uniform -
cost )
можно рассчитать вес каждой ветви и выбрать ветвь, имею-
щую в настоящий момент времени наименьший вес. Другой важ-
ный алгоритм поиска, так называемый А*алгоритм, осуществляет
поиск по оптимальному, эвристически выбираемому пути.




































УНИФИКАЦИЯ

Основной недостаток реализации поиска в данном варианте
Пролога заключается в том, что термами могут быть только атомы.
Все они являются переменными Форта, главное назначение кото-
рых - хранить имена. Наш вариант Пролога может быть усилен
введением переменных особого рода: не обычных переменных
Форта, а логических. Тогда мы сможем записывать на Прологе ут-
верждения такого типа:

213


козел(Х): - млекопитающее(Х), имеет-рога(Х)

Здесь X - переменная, которая может заменять имя конкретного
козла. Пользуясь подобными переменными, можно средствами
Пролога получать атомы, являющиеся подстановками для этих
переменных (или конкретизированные переменные), что позволя-
ет посредством вывода отвечать на вопросы или восстанавливать
данные. К переменным, как вы помните, мы уже обращались при
определении слова соед. Чтобы убедиться в том, что с их помо-
щью можно отвечать на вопросы, рассмотрим утверждения:

козел(борька)
козел (грубиян)

Введя следующее выражение:
? - козел(X)

мы получим конкретизацию X. Вместо X могут быть подставлены
и " борька", и " грубиян". Пример с использованием правила
приведен ниже:

дед(Х, 2): - отец(Х,.У), отец(У, Z)
отец(карл, сэм)
отец(сэм, льюис)

Применяя эти предложения для выражения
? - дед(х, льюис)

путем конкретизации переменных в правиле мы получим:
" Х=карл". Подстановка переменных называется связыванием
( bindings ).
Связывания могут быть представлены списком пар
(связок). Для приведенного выше примера возможны такие
связки:

((X карл)(У c3m)(Z льюис))

Первым элементом каждой пары является переменная, а вто-
рым - ее подстановка. Переменная задает область определения
для подстановки. Совокупность связок служит окружением, или
средой ( environment ).

Вы можете наблюдать за выполнением нашего примера интер-
претатором Пролога, отмечая среду на каждом шаге. Целевое
предложение верхнего уровня - дед(Х, льюис), следовательно, Z -
область определения для льюис. Две цели из правила помещаются
в список целей. Производя поиск на сопоставление с предикатом
oren(X, Y), интерпретатор находит второе предложение,

214


отец(карл, сэм), и осуществляет подстановку со следующим ре-
зультатом:

(( Y сэ м )(Х карлНг льюис))

Вторая цель, также с предикатом " отец', сопоставляется с тем же
самым предложением и осуществляется попытка выполнить
следующие подстановки:

((УкарлКгсэм))

Обе эти подстановки противоречат предыдущим. В данной ситуа-
ции сопоставление заканчивается неудачей, и поиск подходящего
предложеиих продолжается. В следующем предложении имеются
связки для Y и Z, которые полностью согласуются с предыдущими
подстановками. Иными словами, мы приходим к согласованию це-
ли верхнего уровня с базой знаний. Теперь подстановки можно
вывести.

В приведенном выше примере аргументами предикатов явля-
ются атомы. В более общем случае они могут быть также преди-
катами или переменными. Нияке приводится пример более слож-
ного сопоставления. Два предиадта:

f(XY), т(сэм, g(X))
имеют связки:

((Хсэм) (Yg(X)))
Эти предикаты могут быть выражены в виде списка:

(fXY) (теэм (дХ))

Процесс, который мы кратко рассмотрели, называется сопо-
ставлением с образцом ( pattern matching ).
Здесь осуществляется
попытка унификации двух логических выражений путем подстано-
вок согласующихся переменных. Наиболее универсальный алго-
ритм унификации
представлен на рис. 9.6.

Покажем на примере сопоставления нескольких выражений,
как выполняется алгоритм унификации - УНИФИКАЦИЯ
(UNIFY). Допустим, у нас имеются два предиката:

(аХХ), (а Yb)

Их первые элементы сопоставимы. Оба вторых элемента представ-
ляют собой переменные со связкой (X Y). Из сопоставления тре-
тьих элементов вытекает, что X - область определения для Ь, что
выражается связкой:

((XY)(Xb))

215


 


В контексте данного окружения Y должно бы быть областью опре-
деления для Ь, поскольку X служит такой областью для Y, но это
не так. Кроме того, X является областью определения более чем
для одной переменной. А чтобы получить окружение вида

(XYHYb))

67

0

1
2

3
4
5
6
7
8
9
10
11
12
13
14
15

\ АЛГОРИТМ УНИФИКАЦИИ
( С СП1 -> СП2> \ 2АСС0Ц-СПИС0К СОДЕРЖИТ^

\ ПАРЫ ПЕРСПИС-ЗНАЧЕНИЕ
: 2АСС0Ц DUP НОЛЬ
IFNIP

ELSE 2DUP ПЕРВЫЙ т
IF NIP

ELSE ХВОСТ ХВОСТ РЕКУРСИЯ
THEN
THEN

О
1
2
3
4
5
6
7
8
9

10
11
12
13
14
15

68
S АЛГОРИТМ УНИФИКАЦИИ

( С1 @О -> СП2)
: ЗНАЧЕНИЕ OVER ПЕР?
IF 2DUP 2АСС0Ц DUP НОЛЬ
IF2DR0P

ELSE ROT DROP ХВОСТ ПЕРВЫЙ SWAP РЕКУРСИЯ
THEN

ELSE DROP
THEN


Рис. S.6. Алгоритм унификации Пролога. Предполагается, что
переменные могут входить в предикат только один раз


Экраны 67, 68. Алгоритм унификации: определение 2АССОЦ и

ЗНАЧЕНИЕ


 


216


217


вместо переменной в сопоставлении должна участвовать ее напар-
ница по связке. Тогда переменная X окажется связанной с Y, и
при сравнении третьих элементов сопоставляться с Ь будет напар-
ница X по связке, в результате чего получится (Y Ь).

Получение напарницы для переменной осуществляется алго-
ритмом ЗНАЧЕНИЕ (VALUE), приведенным на рис. 9.7. Слово
ЗНАЧЕНИЕ получает аргументы X и О, где X - переменная, а ее

Рис. 9.7. Применение ЗНАЧЕНИЯ словом УНИФИКАЦИЯ для получе-
ния связки логической переменной X в окружении О

218


напарница по связке восстанавливается из списка окружения О.
ЗНАЧЕНИЕ оставляет нетронутыми аргументы, не являющиеся
переменными. В противном случае с помощью АССОЦ отыскива-
ется X в О. Если поиск неудачен, аргумент X возвращается,
поскольку для него нет связки. Если X найден, выполняется
рекурсия по хвосту связки, который может быть следующей
переменной.

Слово ЗНАЧЕНИЕ просматривает цепочку подстановок пере-
менной до последней. Например, при заданном О вида

(( X W )( WU )( U V )( V Y ))

ЗНАЧЕНИЕ возвратит Y как связку для X. Поскольку для данной
переменной возвращается ее ближайшая связка, то при подста-
новках достаточно задавать имя только одной переменной. Кроме
того, выдерживается условие, согласно которому для переменной,
служащей идентификатором области определения по отношению к
другой переменной, ЗНАЧЕНИЕ доставляет атом. Так, в окруже-
нии

(( XY )( Za )( YZ ))

связкой для X будет а. Хотя и известно, что слову ЗНАЧЕНИЕ
первоначально из УНИФИКАЦИИ передается переменная X, тем
не менее необходимо предварительно проверить, является ли
новый аргумент X переменной, так как ЗНАЧЕНИЕ рекурсивно
вызывает само себя. Связки для исходного аргумента X может не
существовать.

Вернемся к алгоритму УНИФИКАЦИЯ. Первый предприни-
маемый шаг - замещение X и Y их связками. Затем, если X ока-
зывается переменной, она сцепляется с Y и такая пара добавляется
к окружению О, которое и возвращается в виде результата. Если
же переменной будет Y, то X и Y меняются местами, поскольку
первым элементом пары в связке должна быть переменная. Далее
пара помещается в О. Несмотря на то что в реализации списков,
описанной в гл.7, не используется механизм ячеек связи, при
следующем обращении к лиспоподобному слову СПИСОК (X Y)
создается ячейка связи (или точечная пара) с головой X и хвостом
Y, а это уже А-список Лиспа (см. гл.7). В нашем примере О реа-
лизовано в виде линейного списка.

В том случае, когда ни X, ни Y не являются переменными,
осуществляется их проверка на атомы. Если один из них ока-
зывается атомом, то другой должен быть сопоставимым атомом.
Иначе не получится новой связки, поскольку нет переменной.
Если же выясняется, что X и Y - не атомы и не переменные, зна-
чит, они должны быть списками, используемыми для представле-
ния предикатов. В такой ситуации УНИФИКАЦИЯ вызывается ре-
курсивно по первым двум элементам списков X и Y.

219


69

0 \ АЛГОРИТМ УНИФИКАЦИИ

1 ( С1 С2 О -> F) \ F * ИСТИНА, ЕСЛИ С1 и С2 УНИФИЦИРУЕМЫ;

2                   \ О СОДЕРЖИТ СВЯЗКИ

3: УНИФИКАЦИЯ DUP > R @ ROT OVER ЗНАЧЕНИЕ -ROT

4 ЗНАЧЕНИЕ OVER ПЕР?

5 «F НУЛЬ -ROT R> СПИСОК TRUE
. 6 ELSE DUP ПЕР?

7 IF SWAP НУЛЬ -ROT R> СПИСОК TRUE

8 ELSE 2DUP ATOM? SWAP ATOM? OR MOT

9        IF 2DUP ПЕРВЫЙ SWAP ПЕРВЫЙ SWAP R# РЕКУРСИЯ

10 I F ХВОСТ SWAP X30CT SWAP R> РЕКУРСИЯ

11 ELSE 20Я0Р R> DROP FALSE THEN

 

12 ELSE R> DROP •

13 THEN

14    THEN

15 THEN;

Экран 69, Алгоритм унификации: определение слова УНИФИКАЦИЯ

Если при таком вызове УНИФИКАЦИИ добавляются новые
связки, то в результате получается обновленное окружение О'.
Далее уже в новом окружении УНИФИКАЦИЯ вызывается по ос-
тавшейся части списков X и Y. Это пример двойной рекурсии
(применявшейся нами ранее при определении слова РАВНО).
После второго вызова создается окончательное окружение. Слово
УНИФИКАЦИЯ, описанное на экране 69, при удачном сопостав-
лении возвращает истинное значение флага. По завершении двух
рекурсивных вызовов флаги логически умножаются (AND), поско-
льку результирующее сопоставление заканчивается успешно толь-
ко при условии, что оба вызова оказались удачными, Если нет ни
одного ложного флага, можно считать, что сопоставление состоя-
лось. Теперь попытаемся применить алгоритм УНИФИКАЦИЯ на
практике. Рассмотрим пример:

(аХЬ)

(a(cY)Y)

Здесь аргумент X будет связан с (с Y), a Y с Ь. Переменная Y в
c(Y) неявно служит и областью определения для Ь, поскольку это
указано непосредственно. Такие связки допустимы. Приведем дру-
гой пример:

(а XXX)
(aYYY)

220.


Здесь X - область определения Y при сопоставлении вторых
элементов каждого списка. Что касается третьих элементов, то
связка X или Y представляет собой область определения Y. На-
конец, при последнем сопоставлении слово ЗНАЧЕНИЕ ищет связ-
ку для X. Такой связкой будет Y. Затем ЗНАЧЕНИЕ отыскивает
связку для Y, а это Y. ЗНАЧЕНИЕ снова ищет связку для Y. По-
лучается бесконечный циклический процесс - зацикливание. Во
избежание зацикливания нужно не допускать, чтобы переменные
связывались сами с собой. Если переменная входит в некоторый
предикат более одного раза, то УНИФИКАЦИЯ не может выпол-
нить процесс унификаций правильно. В следующем примере:

(X)
((аХ))

УНИФИКАЦИЯ также не выдаст совместимую связку. X - область
определения (а X), но подстановка вместо X даст (а (а X)). При
повторе получим:

(а(а( аХ )))

Зацикливание в данном случае произошло потому, что имеется
вхождение X в функцию, для которой он сам служит областью
определения. В алгоритме УНИФИКАЦИЯ отсутствует контроль
вхождений,
поскольку не отслеживается ситуация, когда X входит
в (а X).

Алгоритм УНИФИКАЦИЯ - типичный представитель алгорит-
мов унификации, применяющихся при реализации Пролога.
Быстрота его выполнения достигается ценой следующих огра-
ничений:

1. Переменная должна входить в некоторую функцию не
более одного раза.

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

Существует еще одно осложнение, с которым необходимо счи-
таться при включении алгоритма УНИФИКАЦИЯ в ПОИСК: на
различных уровнях дерева вывода для одних и тех же имен пе-
ременных связки будут различными. Вы видели это в примере с
предикатом дед(Х, У). Отслеживать различные связки одной и той
же переменной можно двумя способами - копированием структур
и совместным использованием структур. Первый способ состоит
в копировании граничных выражений на каждом уровне вывода,
второй - в том, что каждая переменная в связке снабжается
индексом, отражающим уровень. При таком подходе связки имеют
ВИД ((X i) а), где i - индекс X, отражающий номер использования
л. В литературе по логическому программированию приводится

221


множество методов, повышающих эффективность реализаций
Пролога. Один из них (параллельные вычисления) излагается
в гл. 10.


УПРАЖНЕНИЯ

I. Измените порядок предложений в списке ПРЕДЛОЖЕНИЯ (экран 71) так,
чтобы предотвратить;

8) возврат для цели КОЗЕЛ;
б ) возврат вообще.


 


73

0 \ ВЫВОД РАСШИРЕННОГО ПЕРСП

1 ( @ -> ФЛАГ) \ ФЛАГ=ИСТИНЕ, ЕСЛИ @ ЯВЛЯЕТСЯ

2             \ PFA ПЕРЕМЕННОЙ

3: ATOM? BODY> @ ['] НУЛЬ < Э =;
4

5 ( @СПИСОК -> )

6: ВЫДАТЬСПСГ? ." ("

7 BEGIN DUP ПЕРВЫЙ DUP АТОМ?

8    1РОиРНОЛЬ

9        IF DROP ELSE BODY> > NAME. iD THEN

10     ELSE DUP ПЕР?

11        IF 2- BODY> > NAME. ID ELSE РЕКУРСИЯ THEN

12    THEN ХВОСТ DUP НОЛЬ

13 UNTIL 8 ( ЗАБОЙ) EMIT." ) " DROP
14;

15

74

0
1
2
3

4
5
6
7
8
9
10
11
12
13
14
15

\ ВЫВОД РАСШИРЕННОГО ПЕРСП

( ©СПИСОК -> )
: ВЫДАТЬ DUP @ НОЛЬ %
IF DROP CR." НУЛЬ"
ELSE DUP ATOM?
IFBODY> > NAME.ID
ELSE DUP ПЕР?

IF 2- BODY> > NAMECR." ПЕРСП " .ID
ELSE ВЫДАТЬСП
THEN
THEN
THEN

Экраны 73, 74. Вывод на начать расширенного слова ПЕРСП


2, Разработать мирксм сохранения недоказанных целей в списке
НЕУДАЧИ с тем, чтобы и просматривать этот список перед поиском цели в списке
ЦЕЛИ. Вели искомая цель будет обнаружена в сииске НЕУДАЧИ, то должен быть
прекращен немец и активирован возврат.

66

0 N АЛГОРИТМ УНИФИКАЦИИ

1

2

3               у

\ ПЕРСП ОПРЕДЕЛЯЕТ ЛОГИЧЕСКИЕ ПЕРЕМЕННЫЕ
( -> P F A +2 )
; ПЕРСП CREATE HERE 2+, О, DOEa >

4

5

6

7 2+;

8

9

10 ПЕРСП FOO ' FOO @ FORGET FOO
11
12

13 ( С -> F) \ F ИСТИНА, ЕСЛИ ПЕРСП

14 ЛЕР? DUP @ 0** SWAP 4 - g> | DUP 1 LITERAL =

15 DROP

Экран 66. Алгоритм унификации: определение ПЕРСП и ПЕР?

3. Перепишите слово ДОБАВИТЬ-ЦЕЛИ таким образом, чтобы новые цели
п рнсоединялись к концу списка ЦЕЛИ, а не к его иачаяу. (Вам может понадо-
бится новый список для переупорлдочения целей.)

4. Используя модифированный  вариант ДОБАВИТЬ-ШЛИ из упр.З, напи-
шите слово ШП0ИСК для выполнения поиска в ширину, Сравните его эффектив-
ность с зффективностью слова ПОИСК, приведенного из экране 71.

5. Только для модели APРLE II: объясните слова, применяемые при создании
логических переменных ш экране 66. Число, предшествующее С в (ПЕРСП), - код


 


222


223


машинной команды перехода. Почему логическими переменными не могут служить ]
переменные Форта?

6. Объясните слово 2АССО1Д на экране 67 и структуры данных, с которыми
оно выполняется. Объясните порядок использования этого слова в определении
слова ЗНАЧЕНИЕ на экране 68?

7. Модифицируйте слово УНИФИКАЦИЯ таким образом, чтобы имелась воз-
можность применения в одном предикате нескольких вхождений одной и той же
переменной.

8. Осуществите контроль вхождений. Создайте слово Форта, которое
выбирало бы два выражения в качестве аргументов, X и Y, и проверяло бы, не
входит ли X в Y.


Глава 10

ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ


9. Присоедините контроль вхождений из упр.8 к слову УНИФИКАЦИЯ из'

упр.7.


10. Модифицируйте алгоритм УНИФИКАЦИЯ из упр.7 так, чтобы его можно
было встроить в слово НАЙТИ-УТВЕРЖДЕНИЕ.


Обработка списков, поиск и сопоставление по образцу являют-
ся, важными понятиями для систем, основанных на знаниях, но это
лишь базовые методы, применяющиеся в данной области. В насто-
ящей главе мы кратко рассмотрим и другие идеи, возникавшие в
процессе исследований по ИИ. Более подробно они описаны в ли-
тературе, ссылки на которую приведены ь приложениях.

ВСТРОЕННЫЕ ПРЕДИКАТЫ ПРОЛОГА

В гл.9 обсуждалась простая реализация Пролога в виде алго-
ритма поиска в глубину. Алгоритм содержал единственную проце-
дуру. Программы представляли собой набор целевых предложений
в базе знаний. Программирование на Прологе было скорее описа-
тельным, чем прсдписательиым. Вместо того чтобы предписывать
выполнение тех или иных действий над данными, мы описывали
сами данные. Поскольку Пролог реализует некоторый вариант ло-
гики предикатов, а ПОИСК используется для доказательства тео-
рем, то одной только этой процедуры достаточно для решения за-
дач из области искусственного интеллекта. Этот язык может при-
меняться при построении экспертных систем, где список предложе-
ний представляет собой экспертные знания.

Пролег тем не менее обладает такими дополнительными сред-
ствами, как встроенные предикаты. Один из них, отсечение (сим-
вол! ), может быть вставлен в тело некоторого правила между це-
лями, чтобы форсировать возврат. Например, для правила:

С: - А, !, В


225


если вывод В заканчивается неудачей, то и С форсированно закан-
чивается неудачей. Отсечение вынуждает слово ПОИСК удалить
альтернативные ветви С на уровне ИЛИ и вернуться на предыду-
щий уровень И, Предикат отсечения не является описательным,
так как он влияет на функционирование слова П ОИСК. Приведем
еще несколько предписательных предикатов Пролога:

* включить(Х) (assert(X)) - включение утверждения X в виде
предложения в список ПРЕДЛОЖЕНИЯ и успешное завершение;

* удалить(Х) (retract(X)) - удаление X из списка ПРЕДЛО-
ЖЕНИЯ и успешное завершение. Если X не совпал ни с одним ут-
верждением в списке ПРЕДЛОЖЕНИЯ, - это означает н е удачу

.* вызвать(X) (call(X)}-вызов X в качестве цели и успеш-
ное завершение поиска, если цель доказывается. В Прологе имеют-
ся и другие встроенные предикаты, которые здесь не рассматрива-
ются.

ПРОЦЕДУРНОЕ ДОПОЛНЕНИЕ
И ВЫЗОВ ПО ОБРАЗЦУ

Некоторые интерпретаторы правил используют правила, кото-
рые представляют собой пары условие-действие. Ес ли условия удо-
влетворяются, то происходит не занесение заключения в базу зна-
ний, а выполнение данного заключения как процедуры Такая схе-
ма более удобна, чем чисто описательная, поскольку одна и про-
цедур может использоваться для занесения заключения. Этот спо-
соб известен под названием процедурное дополнение. Он сочетает к
себе элементы предписательных методов, например арифметичес-
ких вычислений, и описательных.

Вместо (почти) чисто описательною программирования в
Прологе можно создавать интерпретаторы правил-предписаний.
Развивая идею процедурного дополнения, мы можем выражать
правила в форме образца, сцепленного с процедурой, выполняемой
в том случае, если выполнено сопоставление с конкретным образ-
цом. Эта процедура аналогична слову Форта с той лишь разницей,
что слово Форта вызывается по имени, а процедура • в результате
сопоставления с образцом. Алгоритм сопоставления с образца
соответствует алгоритму УНИФИКАЦИЯ Пролога, в то время как
выполняемые процедуры являются частью функции ПОИСК. Об-
разцами могут работать процедуры: Д ОБАВИТЬ(А ОО ), УДАЛИТЬ
(REMOVE) или ВОССТАНОВИТЬ (RETRIEVE), которые добавля-
ют к базе данных, содержащей доказанные факты, новые факты
удаляют факты из нее или восстанав л ивю т их так же, как и

функция? - в Прологе. В системах, основанных на знаниях подоб-
ного рода, имеется база данных для хранения доказанных фактов.


В Прологе функция " включить(Х)" добавляет X к списку ПРЕД-
ЛОЖЕНИЯ.

Чтобы продемонстрировать использование правил в виде про-
цедур, приведем пример правила с обратным рассуждением:

оте ц (Х, ¥ < )
OTe u ( Y. Z )

дед(Х.г)

ВОССТАНОВИТЬ
ВОССТАНОВИТЬ
КОНЕЦ

где отец(Х, 2) - образец, а слово КОН Е Ц означает завершение
процедуры. Правило прямого вывода п рограмм иру ем на следую-

щем примере:                                                                         '

Oтец(X, Y), Oтeц(Y, Z)
ДОБАВИТЬ дед(ХД)
КОНЕЦ

Алгоритм сопоставления с образцом связывает переменные из

процедуры с переменными образца. В случае правила обратного
вывода X в первой команде ВОССТАНОВИТЬ служит областью
определения для X образца. При втором вызове команды ВОССТА-
НОВИТЬ это связывание остается. Такие связывания являются -
локальными по отношению к выполняемой процедуре поиска об-
разца.


Поделиться:



Последнее изменение этой страницы: 2019-03-29; Просмотров: 258; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.076 с.)
Главная | Случайная страница | Обратная связь