Читаем Prolog полностью

    линеаризация( Лев, Спис1),


    линеаризация( Прав, Спис2),


    конк( Спис1, [Кор | Спис2], Спис).

9. 12

максэлемент( д( _, Кор, nil), Кор) :-  !.


                            % Корень - самый правый элемент

максэлемент( д( _, _, Прав,), Макс) :-


                            % Правое поддерево непустое


    максэлемент( Прав, Макс).

9. 13

внутри( Элем, д( _, Элем, _ ), [ Элем]).

внутри( Элем, д( Лев, Кор, _ ), [Кор | Путь]) :-


    больше( Кор, Элем),


    внутри( Элем, Лев, Путь).

внутри( Элем,д( _, Кор, Прав), [Кор | Путь]) :-


    больше( Элем, Кор),


    внутри( Элем, Прав, Путь).

9. 14

% Отображение двоичного дерева, растущего сверху вниз


% Предполагается, что каждая вершина занимает при печати


% один символ

отобр( Дер) :-


    уровни( Дер, 0, да).


                            % Обработать все уровни


уровни( Дер, Уров, нет) :-  !.


                            % Ниже уровня Уров больше нет вершин


уровни( Дер, Уров, да) :-


                            % Обработать все уровни, начиная с Уров


    вывод( Дер, Уров, 0, Дальше), nl,


                            % Вывести вершины уровня Уров


    Уров1 is Уров + 1,


    уровни( Дер, Уров1, Дальше).


                            % Обработать следующие уровни


вывод( nil, _, _, _, _ ).

вывод( д( Лев, X, Прав), Уров, ГлубХ, Дальше) :-


    Глуб1 is ГлубХ + 1,


    вывод( Лев, Уров, Глуб1, Дальше),


                            % Вывод левого поддерева


( Уров = ГлубХ,  !,


                            % X на нашем уровне?


        write( X), Дальше = да;


                            % Вывести вершину, продолжить


        write(' ') ),


                            % Иначе - оставить место


        вывод( Прав, Уров, Глуб1, Дальше).


                            % Вывод левого поддерева

Глава 10

10. 1

внутри( Элем, л( Элем)).             % Элемент найден в листе

внутри( Элем, в2( Д1, М, Д2) ):-


                                                    % Вершина имеет два поддерева


    больше( М, Элем),  !,           % Вершина не во втором поддереве


    внутри( Элем, Д1);               % Поиск в первом поддереве


    внутри( Элем, Д2).               % Иначе - во втором поддереве

внутри( Элем, в3( Д1, М2, Д2, М3, Д3) ):-


                                                    % Вершина имеет три поддерева


    больше( М2, Элем),  !,


                % Элемент не во втором и не в третьем поддереве


    внутри( Элем, Д1);               % Поиск в первом поддереве


    больше( М3, Элем),  !,         % Элемент не в третьем поддереве


    внутри( Элем, Д2);               % Поиск во втором поддереве


    внутри( Элем, Д3).               % Поиск в третьем поддереве

10. 3

avl( Дер) :-


    аvl( Дер, Глуб).         % Дер является AVL-деревом глубины Глуб

avl( nil, 0).                     % Пустое дерево  -   AVL -дерево глубины 0

avl( д( Лев, Кор, Прав), Г) :-


    avl( Лев, ГЛ),


    avl( Прав, ГП),


    ( ГЛ is ГП; ГЛ is ГП + 1; ГЛ is ГП - 1),


                                    % Глубины поддеревьев примерно совпадают


        макс( ГЛ, ГП, Г).

макс1( U, V, М) :-                                     % М = 1 + макс( U, V)


    U > V,  !, М is U + 1;


    М is V + 1.

Глава 11

11. 1

вглубину1( [Верш | Путь], [Верш | Путь]) :-


    цель( Верш).

вглубину1( [Верш | Путь], Решение) :-


    после( Верш, Верш1),


    not принадлежит( Верш1, Путь),


    вглубину1( [ Верш1, Верш | Путь], Решение).

11. 6

решить( СтартМнож, Решение) :-


                            % СтартМнож - множество стартовых вершин


    bagof( [Верш], принадлежит( Верш, СтартМнож),


                                                        Пути),


    вширину( Пути, Решение).


Назад | Содержание | Вперёд

Назад | Содержание | Вперёд


    ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ


    А

    абстракция данных

    автомат недетерминированный

    автоматический возврат      ещё 1 ссылка

    альфа-бета алгоритм


          программная реализация


          эффективность

    анонимная переменная

    арифметика в Прологе

    арифметические


          операторы


          ребусы

    арность

    атом

    атомы


          декомпозиция      ещё 1 ссылка


          синтаксис


          создание

    ALO


          реализация

    AVL-справочник


          вставление элемента

    AVL-дерево


    Б

    база


          данных в Прологе


          знаний

    быстрая сортировка


    В

    вариант предложения

    вероятностные знания

    возврат автоматический      ещё 1 ссылка

    возвращенные оценки

    вопрос типа


          "как"      ещё 1 ссылка


          "почему"      ещё 1 ссылка

    встроенные операторы


          +,  -,  *,  /,  div,  is,  mod      ещё 1 ссылка

    встроенные процедуры


          >,  <,  >=,   =<,   =:=,  =\=


          !      ещё 1 ссылка


          =..


          ==


          \==


          arg


Перейти на страницу:

Похожие книги

Слово о полку Игореве
Слово о полку Игореве

Исследование выдающегося историка Древней Руси А. А. Зимина содержит оригинальную, отличную от общепризнанной, концепцию происхождения и времени создания «Слова о полку Игореве». В книге содержится ценный материал о соотношении текста «Слова» с русскими летописями, историческими повестями XV–XVI вв., неординарные решения ряда проблем «слововедения», а также обстоятельный обзор оценок «Слова» в русской и зарубежной науке XIX–XX вв.Не ознакомившись в полной мере с аргументацией А. А. Зимина, несомненно самого основательного из числа «скептиков», мы не можем продолжать изучение «Слова», в частности проблем его атрибуции и времени создания.Книга рассчитана не только на специалистов по древнерусской литературе, но и на всех, интересующихся спорными проблемами возникновения «Слова».

Александр Александрович Зимин

Древнерусская литература / Прочая старинная литература / Прочая научная литература / Древние книги / Литературоведение / Научная литература