. , , . ( ) . .
( Domains).
.
20. "". , , : , . , , . , : , , . " ", .
, . , (, , ) :
Domains
data=dat(integer,string,integer)
work=worker(string,integer);notwork
, , :
memfam=mem(string,string,data,work)
:
family(mem(jon,kelly,dat(17,may,1950),worker(bbz,15000)),
mem(bony,kelly,dat(29,may,1951),notwork)),
[mem(pat,kelly,dat(5,april,1983),notwork),
mem(liz,kelly,dat(10,april,1960),notwork)).
family(mem(bob,rob,dat(14,may,1930),worker(pla,12000)),
mem(sally,rob,dat(5,october,1931),worker(plt,11000)),[ ]). %
. , kelly :
goal family(mem(_,kelly,_,_),_,_).
, .
:
goal family(X,_, [_,_,_]).
, , :
goal family(_, mem(Name,Fam,_,_),[_,_,_|_]).
, , , .. .
, . . :
husband(X):family(X,_,_). % X ìóæ
vife(X):family(_,X,_). % X
child(X):family(_,_,Children), % X
|
|
member(X,Children).
exist(X):husband(X); vife(X); child(X). % X
dohod(mem(_,_,_,worker(_,D)),D). % D
dohod(mem(_,_,_,notwork),0). % 0
, , :
1) :
Goal exist(mem(Nam,Fam,_,_)).
2) :
Goal vife(mem(Nam,Fam,_,worker(_,_))).
3) , 8000:
Goal exist(Man), dohod(Man,D), D<8000.
21. " ". ,,. N , . C, B :
1) ;
2) ;
3) , .
, : .
"" , , . move. : , . , N-1 , N-1 , .
domains
loc = right; middle; left
predicates
hanoi(integer)
move(integer, loc, loc, loc)
inform(loc, loc)
clauses
hanoi(N): move(N, left, middle, right). %
move(1, A, _, C): inform(A, C),!. %
move(N, A, B, C): % N
N1=N-1, move(N1, A, C, B),
inform(A, C), move(N1, B, A, C).
inform(Loc1, Loc2): write("\nMove a disk from ", Loc1, " to ", Loc2).
Goal hanoi(10). % 10