ss@arovane % sml Standard ML of New Jersey v110.52 [built: Fri Jan 21 16:42:10 2005] - (* 3.2.1 *) - fun fact(n) = (* assumes n >= 1 *) = if n = 1 then 1 else n * fact(n - 1); val fact = fn : int -> int - fact(11); val it = 39916800 : int - fact(3); val it = 6 : int - fun fact(1) = 1 = | fact(n) = n * fact(n - 1); val fact = fn : int -> int - fact(11); val it = 39916800 : int - fact(3); val it = 6 : int - fun cycle1(L) = tl(L)@[hd(L)]; (* @see 3.1.1(f) *) val cycle1 = fn : 'a list -> 'a list - fun cycle1(nil) = nil = | cycle1(x::xs) = xs@[x]; (* use patterns *) val cycle1 = fn : 'a list -> 'a list - cycle1([2,3,4,5]); val it = [3,4,5,2] : int list - fun cycle(i,L) = = if i=0 then L else cycle(i-1,tl(L))@[hd(L)]; val cycle = fn : int * 'a list -> 'a list - cycle(3,explode("abcdefghi")); val it = [#"d",#"e",#"f",#"g",#"h",#"i",#"c",#"b",#"a"] : char list = if L=nil then nil = else hd(L)::hd(L)::dupList(tl(L)); stdIn:22.7 Warning: calling polyEqual val dupList = fn : ''a list -> ''a list - fun dupList(L) = = if L=nil then nil = else [hd(L),hd(L)]@dupList(tl(L)); stdIn:25.7 Warning: calling polyEqual val dupList = fn : ''a list -> ''a list - dupList([1,2,3]); val it = [1,1,2,2,3,3] : int list - fun dupList(nil) = nil = | dupList(x::xs) = x::x::dupList(xs); val dupList = fn : 'a list -> 'a list - dupList(explode("ABCDEF")); val it = [#"A",#"A",#"B",#"B",#"C",#"C",#"D",#"D",#"E",#"E",#"F",#"F"] : char list - fun length(L) = = if L=nil then 0 = else 1 + length(tl(L)); stdIn:32.7 Warning: calling polyEqual val length = fn : ''a list -> int - length(explode("ABC")); val it = 3 : int - fun length(nil) = 0 = | length(x::xs) = 1 + length(xs); val length = fn : 'a list -> int - length([1,2,3,4]); val it = 4 : int - fun power(x:real, i:int) = = if i=0 then 1.0 = else x*power(x, i-1); val power = fn : real * int -> real - power(2.0, 3); val it = 8.0 : real - fun power(_, 0) = 1.0 = | power(x, i) = x*power(x, i-1); val power = fn : real * int -> real - power(3.0, 2); val it = 9.0 : real - fun max(L) = = if tl(L) = nil then hd(L) = else = if hd(L) > hd(tl(L)) then max(hd(L)::tl(tl(L))) = else max(tl(L)); val max = fn : int list -> int - max([2,5,7,3]); val it = 7 : int - fun max(x::nil) = x = | max(x::y::zs) = = if x>y then max(x::zs) else max(y::zs); stdIn:60.5-62.45 Warning: match nonexhaustive x :: nil => ... x :: y :: zs => ... val max = fn : int list -> int - max([2,4,13,24,11,0]); val it = 24 : int - (* fun f(a:int, b,c,d,e) = ... = a. "if a b:int,c:int = ... d else e -> d:X, e:X = b. if a b:int, c:X, e:X = c. if a b:int, c:int, d:int, e:int = d. if a b:int, c:int, d:int = e. if b c:int, d:int, b:int = f. if b b:X, c:X, d:Y, e:Y = g. if b b:X, c:X, d:Y, e:Y = *) -