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

    унифицируемые( Остальные, Терм, Список).

унифицируемые( [Первый | Остальные], Терм,


                                [Первый | Список] ) :-


    унифицируемые( Остальные, Терм, Список).

Глава 6

6. 1

найтитерм( Терм) :-


                            % Пусть текущий входной поток - это файл f


    read( Терм),  !,


                            % Текущий терм из f сопоставим с Терм'ом?


    write( Терм);                  % Если да - вывести его на терминал


    найтитерм( Терм).       % В противном случае - обработать

6. 2

найтитермы( Терм) :-


    read( ТекущийТерм),


    обработать( ТекущийТерм, Терм).

обработать( end_of_file, _ ) :-  !.

обработать( ТекущийТерм, Терм) :-


    ( not( ТекущийТерм = Терм),  !;


                        % Термы несопоставимы


      write( ТекущийТерм), nl),


                        % В противном случае вывести текущий терм


    найтивсетермы( Терм).


                        % Обработать оставшуюся часть файла

6. 4

начинается( Атом, Символ) :-


    name( Символ, [ Код]),


    name( Атом, [Код | _ ]).

6. 5

plural( Существительное, Существительные) :-


    name( Существительное, СписокКодов),


    name( s, КодS),


    конк( СписокКодов, КодS, НовыйСписокКодов),


    name( Существительные, НовыйСписокКодов).

Глава 7

7. 2

добавить( Элемент, Список) :-


    var( Список),  !,


                        % Переменная Список представляет пустой список


Список = [Элемент | Хвост].

добавить( Элемент, [ _ | Хвост]) :-


    добавить( Элемент, Хвост).

принадлежит( X, Список) :-


    var( Список),  !,


                    % Переменная Список представляет пустой список,


                           % поэтому X не может ему принадлежать


fail.

принадлежит( X, [X | Хвост]).

принадлежит( X, [ _ | Хвост] ) :-


    принадлежит( X, Хвост).

Глава 8

8. 2

добавить_в_конец( L1-[Элемент | Z2], Элемент, L1 - Z2).

8. 3

обратить( А - Z, L - L) :-


                        % Результатом является пустой список,


                                % если A-Z представляет пустой список


    А == Z,  !.

обратить( [X | L] - Z, RL - RZ ) :-


                        % Непустой список


    обратить( L - Z, RL - [X | RZ].

Глава 9

9. 1

список( [ ]).

список( [ _ | Хвост]) :-


    список( Хвост).

9. 2

принадлежит( X, X затем ЧтоУгодно).

принадлежит( X, Y затем Спис) :-


    принадлежит( X, Спис).

9. 3

преобр( [ ], ничего_не_делать).

преобр( [Первый | Хвост], Первый затем Остальные):-


    преобр( Хвост, Остальные).

9. 4

преобр( [ ], ПустСпис, _, ПустСпис).


                                % Случай пустого списка

преобр( [Первый | Хвост], НовСпис, Функтор, Пустой) :-


    НовСпис =.. [Функтор, Первый, НовХвост],


    преобр( Хвост, НовХвост, Функтор, Пустой).

9. 8

сорт1( [ ], [ ]).

сорт1( [X], [X]).

сорт1( Спис, УпорСпис) :-


    разбить( Спис, Спис1, Спис2),


                            % Разбить на 2 прибл. равных списка


    сорт1( Спис1, Упор1),


    сорт1( Спис2, Упор2),


    слить( Упор1, Упор2, УпорСпис).


                            % Слить отсортированные списки


разбить( [ ], [ ], [ ]).

разбить( [X], [X], [ ]).

разбить( [X, Y | L], [X | L1], [Y | L2]) :-


                            % X и Y помещаются в разные списки


    разбить( L, L1, L2).

9. 9

(а)    двдерево( nil).

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


            двдерево( Лев),


            двдерево( Прав).

9. 10

глубина( пусто, 0).

глубина( д( Лев, Кор, Прав), Г) :-


    глубина( Лев, ГЛ),


    глубина( Прав, ГП),


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


    Г is МГ + 1.

макс( А, В, А) :-


    А >= В,  !.

макс( А, В, В).

9. 11

линеаризация( nil, [ ]).

линеаризация( д( Лев, Кор, Прав), Спис) :-


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

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

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

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

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

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