(* 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 l = traverse(left) val r = traverse(right) val oper = operator^" " in output std_out oper end fun postfix(tree) = let val dummy = traverse(tree) in output std_out "\n" end; postfix(leaf(4)); postfix(node("*",node("+",leaf(5),leaf(3)),node("-",leaf(10),leaf(4))));