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

    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

список( [ ]).

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

Вы читаете Prolog
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату