удалить( Ребенок1, Дети, ДругиеДети),
% Выделить первого ребенка
принадлежит( Ребенок2, ДругиеДети),
принадлежит( Ребенок1, Дата),
принадлежит( Ребенок2, Дата).
4.3
% X - первый элемент списка [X | L]
% X - n-й элемент [Y | L]
N1 is N - 1,
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, X/8] ).
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