rendered paste body(*
*************
2/6/2007
csci5161
*)
(* Problem 3 Step 1 *)
signature BTREE =
sig
type item
datatype btree = E of unit | N of item * btree * btree
val initTree : unit -> btree
val insert : btree * item -> btree
val find : btree * item -> bool
val print : btree -> unit
end
(* Problem 3 Step 2 *)
signature ITEM =
sig
type item
val leq : item * item -> bool
val eq : item * item -> bool
val toString : item -> string
end
(* Problem 3 Step 3 *)
functor BTree(
structure Item: ITEM): BTREE =
struct
type item = Item.item
datatype btree = E of unit | N of item * btree * btree
fun initTree() = E()
fun insert (E(),value) = N(value, E(), E())
| insert (N(v,l,r), value) =
if Item.leq(value,v) = true then N(v,insert(l,value),r)
else N(v,l,insert(r, value))
fun find (E(), value) = false
| find (N(v,l,r), value) =
if Item.eq(value, v) = true then true
else if Item.leq(value, v) = true then find(l, value)
else find(r, value)
fun print (E()) = ()
| print (N(v,l,r)) = (print(l); TextIO.print(Item.toString(v)^" "); print(r))
end
(* Problem 3 Step 4 *)
structure IntItem: ITEM =
struct
type item = int
fun leq(v1,v2) = v1 <= v2
fun eq(v1,v2) = v1 = v2
fun toString(v) = Int.toString(v)
end
structure StringItem: ITEM =
struct
type item = string
fun leq(v1,v2) =
if String.compare(v1,v2) = GREATER then false
else true
fun eq(v1,v2) =
if String.compare(v1,v2) = EQUAL then true
else false
fun toString(v) = v
end
(* Problem 3 Step 5 *)
structure IntBTree = BTree(structure Item = IntItem)
structure StringBTree = BTree(structure Item = StringItem)
(* some test code *)
val tree1 = IntBTree.insert (IntBTree.insert (IntBTree.insert (IntBTree.insert (IntBTree.initTree(), 53), 2), 8), 31);
val test1 = IntBTree.find(tree1,2);
IntBTree.print(tree1);
val tree2 = StringBTree.insert (StringBTree.insert (StringBTree.insert (StringBTree.insert (StringBTree.initTree(), "hi"), "testing"), "ajs"), "5161!!");
val test2 = StringBTree.find(tree2, "ajs");
StringBTree.print(tree2);