унифицируемые( [], _, []).
унифицируемые( [Первый | Остальные], Терм, Список) : -
 not( Первый = Терм), !,
 унифицируемые( Остальные, Терм, Список).
унифицируемые( [Первый | Остальные], Терм,
 [Первый | Список] ) :-
 унифицируемые( Остальные, Терм, Список).
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.2
добавить( Элемент, Список) :-
 var( Список), !,
  % Переменная Список представляет пустой список
Список = [Элемент | Хвост].
добавить( Элемент, [ _ | Хвост]) :-
 добавить( Элемент, Хвост).
принадлежит( X, Список) :-
 var( Список), !,
  % Переменная Список представляет пустой список,
  % поэтому X не может ему принадлежать
 fail.
принадлежит( X, [X | Хвост]).
принадлежит( X, [ _ | Хвост] ) :-
 принадлежит( X, Хвост).
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.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]) :-

 
                