X).
4. 4
Входная цепочка укорачивается на каждом неспонтанном цикле, а укорачиваться бесконечно она не может.
4. 5
допускается( S, [ ], _ ) :-
конечное( S).
допускается( S, [X | Остальные], Макс_переходов) :-
Макс_переходов > 0,
переход( S, X, S1),
НовыйМакс is Макс_переходов - 1,
допускается( S1, Остальные, НовыйМакс).
допускается( S, Цепочка, Макс_переходов) :-
Макс_переходов > 0,
спонтанный( S, S1),
НовыйМакс is Макс_переходов - 1,
допускается( S1, Цепочка, НовыйМакс).
4. 7
(а) ходконя( X/Y, X1/Y1) :-
% Ход коня с поля X/Y на поле X1/Y1
( dxy( DX, DY);
% Расстояния по направлениям X и Y
dxy( DY, DX) ),
% Или расстояния по направлениям Y и X
X1 is X + DX,
% X1 расположен в пределах шахматной доски
надоске( X1),
Y1 is Y + DY,
% Y1 расположен в пределах шахматной доски
надоске( Y1).
dxy( 2, 1). % 2 поля вправо, 1 поле вперед
dxy( 2, -1). % 2 поля вправо, 1 поле назад
dxy( -2, 1). % 2 поля влево, 1 поле вперед
dxy( -2, -1). % 2 поля влево, 1 поле назад
надоске( Коорд) :-
% Координаты в пределах доски
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;