Чтение онлайн

на главную

Жанры

Программирование на языке Пролог для искусственного интеллекта

Братко Иван

Шрифт:

черный( X), большой( X)

(3) Просмотр программы для нахождения предложения, сопоставимого с

черный( X)
. Найдено предложение 5:
черный ( кот)
. У этого предложения нет тела, поэтому список целей при соответствующей конкретизации сокращается до

большой( кот)

(4) Просмотр программы в поисках цели

большой( кот)
. Ни одно предложение не найдено. Поэтому происходит возврат к шагу (3) и отмена конкретизации 
X = кот
. Список целей теперь снова

черный( X), большой( X)

Продолжение просмотра программы ниже предложения 5. Ни одно предложение не

найдено. Поэтому возврат к шагу (2) и продолжение просмотра ниже предложения 7. Найдено предложение (8):

темный( Z) :- коричневый( Z).

Замена первой цели в списке на

коричневый( X)
, что дает

коричневый( X), большой( X)

(5) Просмотр программы для обнаружения предложения, сопоставимого

коричневый( X)
. Найдено предложение
коричневый( медведь)
. У этого предложения нет тела, поэтому список целей уменьшается до

большой( медведь)

(6) Просмотр программы и обнаружение предложения

большой( медведь)
. У него нет тела, поэтому список целей становится пустым. Это указывает на успешное завершение, а соответствующая конкретизация переменных такова:

Рис. 2.10. Пример, иллюстрирующий процедурную семантику Пролога: шаги вычислений, выполняемых процедурой

вычислить
.

В главе 1 в разд. "Как пролог-система отвечает на вопросы" мы уже фактически рассмотрели, что делает процедура

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

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

Чтобы вычислить список целевых утверждений

 G1, G2, …, Gm

процедура

вычислить
делает следующее:

• Если список целей пуст - завершает работу успешно.

• Если список целей не пуст, продолжает работу, выполняя (описанную далее) операцию 'ПРОСМОТР'.

• ПРОСМОТР: Просматривает предложения программы от начала к концу до обнаружения первого предложения С, такого, что голова С сопоставима с первой целью G1. Если такого предложения обнаружить не удается, то работа заканчивается неуспехом.

Если С найдено и имеет вид

H :- B1, ..., Вn.

то переменные в С переименовываются, чтобы получить такой вариант С' предложения С, в котором нет общих переменных со списком G1, …, Gm. Пусть С' — это

Н' :- B1', ..., Вn'.

Сопоставляется G1 с H'; пусть S — результирующая конкретизация переменных. В списке целей G1, G2, …, Gm, цель G1 заменяется на список В1', …, Вn', что порождает новый список целей:

В1', …, Вn', G2, …, Gm

(Заметим, что, если С — факт, тогда n=0, и в этом случае новый список целей оказывается короче, нежели исходный; такое уменьшение списка целей может в определенных случаях превратить его в пустой, а следовательно, — привести к успешному завершению.)

Переменные в новом списке целей заменяются новыми значениями, как это предписывает конкретизация S, что порождает еще один список целей

В1'', …, Вn", G2', …, Gm'

• Вычисляет (используя рекурсивно ту же самую процедуру) этот новый список целей. Если его вычисление завершается успешно, то и вычисление исходного списка целей тоже завершается успешно. Если же его вычисление порождает неуспех, тогда новый список целей отбрасывается и происходит возврат к просмотру программы. Этот просмотр продолжается, начиная с предложения, непосредственно

следующего за предложением С (С — предложение, использовавшееся последним) и делается попытка достичь успешного завершения с помощью другого предложения.

Более компактная запись этой процедуры в обозначениях, близких к Паскалю, приведена на рис. 2.11.

Здесь следует сделать несколько дополнительных замечаний, касающихся процедуры

вычислить
в том виде, в котором она приводится. Во-первых, в ней явно не указано, как порождается окончательная результирующая конкретизация переменных. Речь идет о конкретизации S, которая приводит к успешному завершению и которая, возможно, уточнялась последующими конкретизациями во время вложенных рекурсивных вызовов
вычислить
.

procedure вычислить (Прогр, СписокЦелей, Успех)

Входные параметры:

 Прогр: список предложений

 СписокЦелей: список целей

Выходной параметр:

 Успех: истинностное значение; Успех принимает значение

истина, если список целевых утверждений

(их конъюнкция) истиннен с точки зрения Прогр

Локальные переменные:

 Цель: цель

 ДругиеЦели: список целей

 Достигнуты: истинностное значение

 Сопоставились: истинностное значение

 Конкрет: конкретизация переменных

H, Н', B1, B1', …, Вn, Вn': цели

Вспомогательные функции:

 пycтой( L): возвращает истину, если L — пустой список

 голoвa( L): возвращает первый элемент списка L

 хвост( L): возвращает остальную часть списка L

 конкат( L1, L2): создает конкатенацию списков — присоединяет

список L2 к концу списка L1

 сопоставление( T1, T2, Сопоставились, Конкрет): пытается

сопоставить термы Т1 и T2; если они сопоставимы, то

Сопоставились — истина, а Конкрет представляет

собой конкретизацию переменных

 подставить( Конкрет, Цели): производит подстановку переменных

в Цели согласно Конкрет

begin

 if пустой( СписокЦелей) then Успех : = истина

 else

begin

Цель : = голова( СписокЦелей);

ДругиеЦели : = хвост( СписокЦелей);

Достигнута : = ложь;

while not Достигнута and

"в программе есть еще предложения" do

begin

Пусть следующее предложение в Прогр есть

H :- B1, …, Вn.

Создать вариант этого предложения

Поделиться:
Популярные книги

Камень. Книга пятая

Минин Станислав
5. Камень
Фантастика:
боевая фантастика
6.43
рейтинг книги
Камень. Книга пятая

Черный маг императора

Герда Александр
1. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Черный маг императора

Кодекс Крови. Книга VI

Борзых М.
6. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VI

Отверженный. Дилогия

Опсокополос Алексис
Отверженный
Фантастика:
фэнтези
7.51
рейтинг книги
Отверженный. Дилогия

Неудержимый. Книга XIII

Боярский Андрей
13. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIII

Черный Маг Императора 6

Герда Александр
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Черный Маг Императора 6

Начальник милиции. Книга 3

Дамиров Рафаэль
3. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 3

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

Лорд Системы 13

Токсик Саша
13. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 13

На границе империй. Том 9. Часть 4

INDIGO
17. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 4

Вторая невеста Драконьего Лорда. Дилогия

Огненная Любовь
Вторая невеста Драконьего Лорда
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Вторая невеста Драконьего Лорда. Дилогия

Неудержимый. Книга X

Боярский Андрей
10. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга X

Гарем вне закона 18+

Тесленок Кирилл Геннадьевич
1. Гарем вне закона
Фантастика:
фэнтези
юмористическая фантастика
6.73
рейтинг книги
Гарем вне закона 18+

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания