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 <ctrl>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
<ctrl d>
$