Глава 4. ?- family! pers on (_, Name , _, _) , _, [] ) ?- child
4.1.
a)
6) в)
?- |
r)
?- family! pers on (_, Name , _, _) , _, [] ) ?- child! person! Name, SecondName,
works(_»_))) .
?-
family { person {_, Name, _, unemployed) , person(_,_,_,works L,J ) , _) -
family ( Husband, Wife, Children), dateafbirthi Husband, date(_,_, Yearl)), dateofbirthf Wife, date(_,_,Year2)), (Yearl - Year2 >- IS
4.2.
Yeai:2 |
Yearl >= 15
),
member! Child, Children) .
twinst Childl, Child2) :-family! _, _r Children), del ! Childl, Children, OtherChildren), «Удалить
* объект Childl member! Child2, OtherChildren) , dateofbirthl Childl, Date) , dateofbirthf Chiid2, Date).
4.3.
nth_member( 1, !X I LI, X) .
nth_raember( K, [Y IL] , X)
N1 is N - 1, ntb_member[ N1, L X) .
i X - первый элемент % списка !Х I L] : - % X - n-й элемент i списка is [V IL)
4.4
4.5.
Входная строка сокращается после прохоадения каждого цикла, отличного от скрытого, а поскольку она имеет конечную длину, то не может сокращаться бесконечно долго.
[ ] , _) :-
accepts (State,
: - |
[X I Rest], MaxMoves) |
final{ State) accepts,- State,
MaxMoves > 0,
trans( State, X, State 1],
NewMax is MaxMoves - 1,
accepts] Statel, Rest, NewMax). Accepts,- State, String, MaxMoves} :
MaxMoves > 0,
silent! State, Statel) ,
HewMax is KaxMoves - 1,
accepts[ Statel, String, NewMan) .
в |
орадок определен |
цели |
jump! X/Y, XI/YD |
( dxy( Dx, Dy) |
t |
4.6. Такой 4.7.
г a)
member |
( Y, |
* |
: - |
[1,2,3,4,5,5,7,8]) .
конь переходит из клетки
% X/Y Б клетку Xl/Yl Расстояния между позициями коня
Решения к отдельным упражнением
Ч в направлениях х и у
б)
В)
cbty( Dy, Dx) % или в направлениях у и х ) ,
XI is X + Dx, inboard! XI) , Yl is Y + Dy, ir.boarcM Yl) . dxy ( dxy ( |
% XI находится в пределах шахматной доски
пределах шахматной доски 1 вперед |
в пределах |
i Yl находится в 2, 1) . § 2 клетки вправо, 2, -1) , % 2 клетки вправо, 1 назад dxy( -2, 1) , % 2 клетки влево, 1 вперед dxy( -2 , - 1 ) . % 2 клетки влево, 1 назад inboard( Coord) :- % Координаты находятся
% шахматной доски О < Coord, Coord < 9.
knightpatht [Square]). t Конь стоит на клетке Square knightpath( [S1,S2 ] Rest)) :-
jump( SI, S2) ,
knigbtpath; [S2 I Rest]) .
?- knightpathf [2/1,R, 5/4,S,X/B] ) .
Глава 5
5.1,
a) | x = i,- |
X = 2; | |
6) | X = 1 |
Y = 1; | |
X .= 1 | |
Y = 2; | |
X = 2 | |
4 = 1; | |
X = 2 | |
Y = 2 ; | |
B) | X = 1 |
Y = 1; | |
X = 1 | |
• Y = 2 |
5.2.
53.
5.4. 5.5,
Предполагается, что вызов процедуры class происходит с неконкретизированным вторым параметром.
class [ Number, positive) :-
Number > 0, ! . class( 0, zero) :- !. class [ number, negative) .
split! [] , [],[]>• split! [X I L] , [X ILI] , L2) :-
X > = 0, I ,
split( L, LI, L2) . split) [X I L) , LI , [X i L2J) ;-
split! L, LI, L2] .
member ( Item, Candidates] , not member! Item, RuledOut)
set_difference! [] , _, []) . set_difference{ [X I LI], L2, L) :-
member! X, 12) , !,
set_difference( LI, L2, L) , set_difference{ [X I LI], L2, [X I L]) :-
set_difference( LI, L2, L ) . .
Решения к отдельным упражнениям
5.6. unifiable([] , _, []} .
unifiablet [First I Rest], Term, List) :-
not! First = Term) , ! ,
unitiable( Rest, Term, List) . unifiablel [First I Rest!, Term, [First I List])
unifiablet Rest, Term, List) .
-