Шрифт:
надоске( Коорд) :-
% Координаты в пределах доски
0 < Коорд,
Коорд < 9.
(b) путьконя( [ Поле]). % Конь стоит на поле Поле
путьконя( [S1, S2 | Остальные] ) :-
ходконя( S1, S2),
путьконя( [S2 | Остальные]).
(c) ?- путьконя( [2/1, R, 5/4, S, Х/8] ).
Глава 5
5. 1
(a) X = 1;
X = 2
(b) X = 1;
Y = 1;
X = 1;
Y = 2;
X = 2;
Y = 1;
X = 2
Y = 2;
(c) X = 1;
Y = 1;
X = 1;
Y = 2;
5. 2
класс( Число, положительное) :-
Число > 0, !.
класс( 0, нуль) :- !.
класс( Число, отрицательное).
5. 3
разбить( [ ], [ ], [ ]).
разбить( [X | L], [X | L1], L2) :-
X >= 0, !,
разбить( L, L1, L2).
разбить( [X | L], L1, [X | L2]) .
разбить( L, L1, L2).
5. 4
принадлежит( Некто, Кандидаты),
not принадлежит( Некто, Исключенные)
5. 5
разность( [ ], _, [ ]).
разность( [X | L1], L2, L):-
принадлежит( X, L2), !,
разность( L1, L2, L).
разность( [X | L1], L2, [X | L]) :-
разность( L1, L2, L).
5. 6
унифицируемые( [ ], _, [ ]).
унифицируемые( [Первый | Остальные], Терм, Список) : -
not( Первый = Терм), !,
унифицируемые( Остальные, Терм, Список).
унифицируемые( [Первый | Остальные], Терм,
[Первый | Список] ) :-
унифицируемые( Остальные, Терм, Список).
Глава 6
6. 1
найтитерм( Терм) :-
% Пусть текущий входной поток - это файл f
read( Терм), !,
% Текущий терм из f сопоставим с Терм'ом?
write( Терм); % Если да - вывести его на терминал
найтитерм( Терм). % В противном случае - обработать
6. 2
найтитермы( Терм) :-
read( ТекущийТерм),
обработать( ТекущийТерм, Терм).
обработать( end_of_file, _ ) :- !.
обработать( ТекущийТерм, Терм) :-
( not( ТекущийТерм = Терм), !;
% Термы несопоставимы
write( ТекущийТерм), nl),
% В противном случае вывести текущий терм