Глава 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) .


-