All pastes #425060 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-04-05 07:14 UTC
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);