(* Sample ML program - Abstract Syntax Trees *) (* Declare the ast datatype *) datatype ast = empty | leaf of int | node of string*ast*ast; fun traverse(empty) = output std_out "empty tree" | traverse(leaf(n)) = let val nstr = makestring(n)^" " in output std_out nstr end | traverse(node(operator, left, right)) = let val dummy = let val oper = operator^" " in output std_out oper end val l = traverse(left) val r = traverse(right) in output std_out "" end fun prefix(tree:ast) = let val dummy = traverse(tree) in output std_out "\n" end; prefix(leaf(4)); prefix(node("*",node("+",leaf(5),leaf(3)),node("-",leaf(10),leaf(4))));