[hwxi@xanadu ~]$ sml-cm Standard ML of New Jersey, Version 110.0.7, September 28, 2000 [CM; autoload enabled] - 1+2; val it = 3 : int - it + it; val it = 6 : int - it + it; val it = 12 : int - "hello" ^ " everyone!" = ; val it = "hello everyone!" : string - it + it; stdIn:22.4 Error: overloaded variable not defined at type symbol: + type: string - fn x:int => x + x; val it = fn : int -> int - fn x:real => x + x; val it = fn : real -> real - fn x => x + x; GC #0.0.0.0.1.11: (0 ms) val it = fn : int -> int - val double = fn x => x + x; val double = fn : int -> int - double 5; val it = 10 : int - val n = 10; val n = 10 : int - val add10 = fn x => x + n; val add10 = fn : int -> int - add10 1; val it = 11 : int - val n = 100; val n = 100 : int - add10 1; val it = 11 : int - 1.0; val it = 1.0 : real - 1 div 2; val it = 0 : int - 1/2; stdIn:34.2 Error: overloaded variable not defined at type symbol: / type: int - 1.0 / 2.0; val it = 0.5 : real - val rec fact = fn n => if n = 0 then 1 else n * fact (n-1); val fact = fn : int -> int - fact 10; val it = 3628800 : int - fun fact n = if n = 0 then 1 else n * fact (n-1); val fact = fn : int -> int - fact 10; val it = 3628800 : int - (1, 2); val it = (1,2) : int * int - #1 it; val it = 1 : int - (1, 2); val it = (1,2) : int * int - #2 it; val it = 2 : int - (1, 2); val it = (1,2) : int * int - #3 it; stdIn:44.1-44.6 Error: operator and operand don't agree [record labels] operator domain: {3:'Y; 'Z} operand: int * int in expression: (fn {3=3,...} => 3) it - {a = 1; b = 2}; stdIn:2.2 Error: syntax error found at SEMICOLON - {a = 1, b = 2}; GC #0.0.0.0.2.52: (0 ms) val it = {a=1,b=2} : {a:int, b:int} - #a it; val it = 1 : int - {a = 1, b = 2}; val it = {a=1,b=2} : {a:int, b:int} - #b it; val it = 2 : int - (1, true); val it = (1,true) : int * bool - (1, fn x => 1); val it = : int * ('a -> int) - (1, fn x:int => 1); val it = (1,fn) : int * (int -> int) - datatype btree = E | B of btree * btree; datatype btree = B of btree * btree | E - E; val it = E : btree - B; val it = fn : btree * btree -> btree - B(E, E); val it = B (E,E) : btree - fun height E = 0 = | height (B (t1, t2)) = = 1 + Int.max (height (t1), height (t2)); val height = fn : btree -> int - height (B(E, E)); val it = 1 : int - []; val it = [] : 'a list - [1,2,3]; val it = [1,2,3] : int list - 1 :: 2 :: 3 :: []; val it = [1,2,3] : int list - fun sumlist [] = 0 = | sumlist (x :: xs) = x + sumlist xs; val sumlist = fn : int list -> int - sumlist [1,2,3]; val it = 6 : int - ([]: int list); val it = [] : int list - fun val_at_0 (f: int -> int): int = f (0); val val_at_0 = fn : (int -> int) -> int - val_at_0(double); val it = 0 : int - fun map f [] = [] = | map f (x :: xs) = f (x) :: map f xs = ; val map = fn : ('a -> 'b) -> 'a list -> 'b list - map double [1,2,3]; val it = [2,4,6] : int list - fun for (body: int -> unit) s e = = let = fun aux i = = if i > e then () = else (body (i); aux (i+1)) = in = aux (s) = end = ; val for = fn : (int -> unit) -> int -> int -> unit - fun hello (i:int) = "hello: " ^ (Int.toString i) ^ "\n"; val hello = fn : int -> string - fun hello (i:int) = print ("hello: " ^ (Int.toString i) ^ "\n"); val hello = fn : int -> unit - for hello 1 10; GC #0.0.0.0.3.113: (0 ms) hello: 1 hello: 2 hello: 3 hello: 4 hello: 5 hello: 6 hello: 7 hello: 8 hello: 9 hello: 10 val it = () : unit - exception Fatal; exception Fatal - fun f (x) = if x > 0 then x else raise Fatal; val f = fn : int -> int - f (10); val it = 10 : int - f (0); uncaught exception Fatal raised at: stdIn:85.40-85.45 - f (0) handle Fatal => 0; val it = 0 : int - val xref = ref 0; val xref = ref 0 : int ref - !xref; val it = 0 : int - val _ = xref := !xref + 1; - !xref; val it = 1 : int - val _ = xref := !xref + 1; - !xref; val it = 2 : int - fun inc (x: int ref) = (x := !x + 1); val inc = fn : int ref -> unit - inc (xref); val it = () : unit - !xref; val it = 3 : int - [hwxi@xanadu ~]$ cd courses/CS520/code [hwxi@xanadu code]$ ls client game-of-24 lambda0.tar rational stream client.tar lambda0 parsing server.tar students [hwxi@xanadu code]$ mkdir examples [hwxi@xanadu code]$ cd examples/ [hwxi@xanadu examples]$ sml-cm Standard ML of New Jersey, Version 110.0.7, September 28, 2000 [CM; autoload enabled] - CM.make (); [starting dependency analysis] [scanning sources.cm] [checking CM/x86-unix/sources.cm.stable ... not usable] [parsing ex1.sml] [Creating directory CM/DEPEND ...] [dependency analysis completed] [compiling ex1.sml -> CM/x86-unix/ex1.sml.bin] [Creating directory CM/x86-unix ...] [wrote CM/x86-unix/ex1.sml.bin] [introducing new bindings into toplevel environment...] val it = () : unit - Double.double (1); val it = 2 : int - structure D = Double; structure D : DOUBLE - D.double (10); GC #0.0.0.0.1.9: (0 ms) val it = 20 : int - open Double; opening Double val double : int -> int - double (100); val it = 200 : int [hwxi@xanadu examples]$ exit Process shell finished