. , ,
tree (Left, Root, Right),
Left , , tree (), Root (- , , ), Right , tree ().
. :
: tree (end, X, end).
: tree (Left, Root, Right) , , .
1. , Root, .
2. , Root, .
. insert(), :
insert (end, X, tree (end, X, end)).
insert (tree (Left, Root, Right), X, tree (LeftNew, Root, Right)) :- X < Root, insert (Left, X, LeftNew).
insert (tree (Left, Root, Right), X, tree (Left, Root, RightNew)) :- X > Root, insert (Right, X, RightNew).
. insert() . , , :
list_to_tree ([], end).
list_to_tree ([ H | T ], AllTree) :- list_to_tree (T, Tree), insert (Tree, H, AllTree).
. ' .
: (end) [].
: ³ tree (Left, Root, Right), Left L1, a Right L2, [ Root | L2 ] L1.
tree_to_list (end,[]).
tree_to_list (tree (Left, Root, Right), List) :- tree_to_list (Left, L1), tree_to_list (Right, L2), append (L1,[ Root | L2 ], List).
-, .
/* 5_2 */
domains
worker = symbol
listworker = worker*
tree = tree (tree, worker, tree); end
predicates
db1 (tree)
db2 (listworker)
record (worker, tree)
append (listworker, listworker, listworker)
insert (tree, worker, tree)
list_to_tree (listworker, tree)
tree_to_list (tree, listworker)
goal1
goal2
goal3
goal4
goal5
goal6
goal7
goal8
clauses
goal1:- db1 (DB), write (DB).
goal2:- db1 (DB), record (R, DB), write (R), nl, fail.
goal3:- db1 (DB), write ( ), readln (E1), insert (DB, E1, DBnew), write (DBnew).
|
|
goal4:- db1 (DB), write ( ), readln (E1), insert (DB, E1, DBnew), record (R, DBnew), write (R), nl, fail.
goal5:- db2 (List), list_to_tree (List, Tree), write (Tree).
goal6:- db2 (List), list_to_tree (List, Tree), record (R, Tree), write (R), nl, fail.
goal7:- db1 (Tree), tree_to_list (Tree, List), write (List).
goal8:- db2 (List), write (List), nl, list_to_tree (List, Tree), write (Tree), nl, tree_to_list (Tree, NewList), write (NewList), nl.
insert (end, X, tree (end, X, end)).
insert (tree (L, Root, R), X, tree (LNew, Root, R)) :- X < Root, insert (L, X, Lnew).
insert (tree (L, Root, R), X, tree (L, Root, RNew)) :- X > Root, insert (R, X, RNew).
list_to_tree ([], end).
list_to_tree ([ H | T ], AllTree) :- list_to_tree (T, Tree), insert (Tree, H, AllTree).
tree_to_list (end,[]).
tree_to_list (tree (L, Root, R), List) :- tree_to_list (L, L1), tree_to_list (R, L2), append (L1,[ Root | L2 ], List).
record (R, tree (LeftTree, _, _)) :- record (R, LeftTree).
record (R, tree (_, R, _)).
record (R, tree (_, _, RightTree)) :- record (R, RightTree).
append ([], L2, L3).
append ([ H | L1 ], L2,[ H | L3 ]) :- append (L1, L2, L3).
db1 (tree (tree (end, a, end), c, tree (end, e, end))).
db2 ([ c, e, a ]).
, . 5_2 . : . , , .
db1() db2(). , . .
(goal1) , .
(goal2) , record().
(goal3 goal4) .
' (goal5 goal6) , , , .
(goal7) .
(goal8) . . . , , .