Second ML example ~$ sml Standard ML of New Jersey, Version 110.0.3, January 30, 1998 [CM; autoload enabled] - fun fact (n) = = if n=0 then 1 = else n*fact(n-1); val fact = fn : int -> int - fact 7; val it = 5040 : int - fact 0; val it = 1 : int - fact(0-1); GC #11.119.121.123.126.492: (10 ms) GC #11.120.122.124.127.497: (10 ms) [an infinite loop, I entered C] Interrupt GC #11.121.123.125.128.499: (0 ms) - fun successor(n) = n+1; val successor = fn : int -> int - fun pred(n) = n-1; val pred = fn : int -> int - fun add(m,n) = = if m=0 then n = else successor(add(pred(m),n)); val add = fn : int * int -> int - add(2,2); val it = 4 : int - add(500,50); val it = 550 : int - let val x=5 in (3*x*x - 7*x - 10) end; val it = 30 : int - let val x=3 = in let val x=x+1 = in x+x*x = end = end; val it = 20 : int - [1,3] @ [2,5,4]; val it = [1,3,2,5,4] : int list - fun append(x,z) = if null(x) then z = else hd(x)::append(tl(x),z); val append = fn : 'a list * 'a list -> 'a list - append([1,3],[2,4,5]); val it = [1,3,2,4,5] : int list - append([1,3],[]); val it = [1,3] : int list - append([],[2,4,5]); val it = [2,4,5] : int list - fun reverse(x,z) = if null(x) then z = else reverse(tl(x),hd(x)::z); val reverse = fn : 'a list * 'a list -> 'a list - reverse([2,4,6,8,10],[]); val it = [10,8,6,4,2] : int list - fun rev(x) = reverse(x,[]); val rev = fn : 'a list -> 'a list - rev [2,4,6,7,10]; val it = [10,7,6,4,2] : int list - fun len([]) = 0 = | len(a::y) = 1+len(y); GC #0.0.0.0.2.89: (0 ms) val len = fn : 'a list -> int - len [2,4,6,8,10]; val it = 5 : int - len []; val it = 0 : int - len ["a","c","e","g"]; val it = 4 : int - fun app([],z) = z = | app(a::y,z) = a::append(y,z); val app = fn : 'a list * 'a list -> 'a list - app([1,3],[2,4,5]); val it = [1,3,2,4,5] : int list - fun strip (a,[]) = [] = | strip (a,b::y) = = if a=b = then strip(a,y) = else b::strip(a,y); val strip = fn : ''a * ''a list -> ''a list - strip(3,[1,2,3,4,3,2,1]); val it = [1,2,4,2,1] : int list - strip(5,[1,2,3,4,3,2,1]); val it = [1,2,3,4,3,2,1] : int list - strip("dog",["cat","dog","fish","dog","book"]); val it = ["cat","fish","book"] : string list - strip([1,2],[[3,4],[2,3],[1,2],[1,3]]); val it = [[3,4],[2,3],[1,3]] : int list list $