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

на главную

Жанры

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

Братко Иван

Шрифт:

доб23( Дер, X, в2( Д1, М, Д2) ) :-

 встав( Дер, X, Д1, М, Д2).

Отношение

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

Случай а

 встав( в2( Д1, M, Д2), X, в2( НД1, M, Д2) ) :-

больше( M, X), % M больше, чем X

встав( Д1, X, НД1).

Случай b

 встав( в2( Д1, M, Д2), X, в3( НД1а, Мб, НД1б, M, Д2) ) :-

больше( M, X),

встав( Д1, X, НД1а, Мб, НД1б).

Случай с

 встав( в3( Д1, M2, Д2, М3, Д3), X,

в2( НД1а, Мб, НД1б), M2, в2(Д2, М3, Д3) ) :-

больше( M2, X),

встав( Д1, X, НД1а, Мб, НД1б).

Рис. 10.5. Некоторые из случаев работы отношения

встав
(a) 
встав( в2( Д1, М, Д2), X, в2( НД1, М, Д2) )
; (b)
встав( в2( Д1, М, Д2), X, в3( НД1а, Мб, НД1б, М, Д2) )
; (c)
встав( в3( Д1, M2, Д2, М3, Д3), X, в2( НД1а, Мб, НД1б), M2, в2( Д2, М3, Д3) )

% Вставление элемента в 2-3 справочник

доб23( Дер, X, Дер1) :- % Вставить X в Дер, получить Дер1

 встав( Дер, X, Дер1). % Дерево растет вширь

доб23( Дер, X, в2( Д1, M2, Д2) ) :-

 встав( Дер, X, Д1, M2, Д2). % Дерево растет вглубь

доб23( nil, X, л( X) ).

встав( л( А), X, л( А), X, л( X) ) :-

 больше( X, А).

встав( л( А), X, л( X), А, л( А) ) :-

 больше( А, X).

встав( в2( Д1, М, Д2), X, в2( НД1, М, Д2) ) :-

 больше( М, X),

 встав( Д1, X, НД1).

встав( в2( Д1, М, Д2), X, в3( НД1а, Мб, НД1б, М, Д2) ) :-

 больше( М, X),

 встав( Д1, X, НД1а, Мб, НД1б).

встав( в2( Д1, М, Д2), X, в2( Д1, М, НД2) ) :-

 больше( X, М),

 встав( Д2, X, НД2).

встав( в2( Д1, М,
Д2), X, в3( Д1, М, НД2а, Мб, НД2б) ) :-

 больше( X, М),

 встав( Д2, X, НД2а, Мб, НД2б).

встав( в3( Д1, M2, Д2, М3, Д3), X,

 в3( НД1, M2, Д2, М3, Д3) :-

 больше( M2, X),

 встав( Д1, X, НД1).

встав( в3( Д1, M2, Д2, М3, Д3), X,

 в2( НД1а, Мб, НД1б), M2, в2( Д2, М3, Д3) ) :-

 больше( M2, X),

 встав( Д1, X, НД1а, Мб, НД1б).

встав( в3( Д1, M2, Д2, М3, Д3), X,

 в3( Д1, M2, НД2, М3, Д3) ) :-

 больше( X, M2), больше( М3, X),

 встав( Д2, X, НД2).

встав( в3( Д1, M2, Д2, М3, Д3), X,

 в2( Д1, M2, НД2а), Мб, в2( НД2б, М3, Д3) ) :-

 больше( X, M2), больше( М3, X),

 встав( Д2, X, НД2а, Мб, НД2б).

встав( в3( Д1, M2, Д2, М3, Д3), X,

 в3( Д1, M2, Д2, М3, НД3) ) :-

 больше( X, М3),

 встав( Д3, X, НД3).

встав( в3( Д1, M2, Д2, М3, Д3), X,

 в2( Д1, M2, Д2), М3, в2( НД3а, Мб, НД3б) ) :-

 больше( X, М3),

 встав( Д3, X, НД3а, Мб, НД3б).

Рис. 10.6. Вставление элемента в 2-3 справочник. В этой программе предусмотрено, что попытка повторного вставления элемента терпит неудачу.

Программа для вставления нового элемента в 2-3 справочник показана полностью на рис. 10.6. На рис. 10.7 показана программа вывода на печать 2-3 деревьев.

Наша программа иногда выполняет лишние возвраты. Так, если

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

встав2( Дер, X, Деревья)

где

Деревья
 — список, состоящий либо из одного, либо из трех аргументов:

 

Деревья = [ НовДер]
, если
встав( Дер, X, НовДер)

Деревья = [ НДа, Мб, НДб]

 если

встав( Дер, X, НДа, Мб, НДб)

Теперь отношение

доб23
можно переопределить так:

доб23( Д, X, Д1) :-

 встав( Д, X, Деревья),

 соединить( Деревья, Д1).

Отношение

соединить
формирует одно дерево Д1 из деревьев, находящихся в списке
Деревья
.

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

Возвышение Меркурия. Книга 12

Кронос Александр
12. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 12

Кодекс Охотника. Книга XXIV

Винокуров Юрий
24. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXIV

Буря империи

Сай Ярослав
6. Медорфенов
Фантастика:
аниме
фэнтези
фантастика: прочее
эпическая фантастика
5.00
рейтинг книги
Буря империи

Месть за измену

Кофф Натализа
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Месть за измену

Деспот

Шагаева Наталья
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Деспот

Осознание. Пятый пояс

Игнатов Михаил Павлович
14. Путь
Фантастика:
героическая фантастика
5.00
рейтинг книги
Осознание. Пятый пояс

Тринадцатый VII

NikL
7. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый VII

Эра мангуста. Том 4

Третьяков Андрей
4. Рос: Мангуст
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эра мангуста. Том 4

Ветер перемен

Ланцов Михаил Алексеевич
5. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ветер перемен

Приручитель женщин-монстров. Том 11

Дорничев Дмитрий
11. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 11

На границе империй. Том 7

INDIGO
7. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
6.75
рейтинг книги
На границе империй. Том 7

Прометей: владыка моря

Рави Ивар
5. Прометей
Фантастика:
фэнтези
5.97
рейтинг книги
Прометей: владыка моря

Бракованная невеста. Академия драконов

Милославская Анастасия
Фантастика:
фэнтези
сказочная фантастика
5.00
рейтинг книги
Бракованная невеста. Академия драконов

Кодекс Охотника. Книга XXII

Винокуров Юрий
22. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXII