найтитермы( Терм) :-
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
список( [ ]).
список( [ _ | Хвост]) :-