Lecture 1: Beginning ML ======================= 1. Hello world in SML print "Hello world\n"; 2. factorial function C versions: int fact (int n) { int i, result; i = 1; result = 1; while (i <= n) { result = result * i; } return result; } int fact (int n) { int i, result; result = 1; for (i=1; i <= n; i++) { result = result * i; } return result; } And here is a complete program that will take arguments as command line options: ------------- #include int fact (int n) { int i, result; i = 1; result = 1; while (i <= n) { result *= i; i++; } return result; } main (int argc, char *argv[]) { int x; sscanf(argv[1], "%d$", &x); printf("%d\n", fact(x)); return 0; } ============ Scheme version (define fact (lambda (n) (cond ((= n 0) 1) (else (* n (fact (- n 1))))))) ============ ML versions fun fact1 n = if n = 0 then 1 else n * fact1(n-1); --------- fun fact2 0 = 1 | fact2 n = n * fact2 (n-1); --------- fun range n m = if m < n then [] else n :: range (n+1) m fun prod [] = 1 | prod (x::xs) = x * prod xs; fun fact3 n = prod(range 1 n); --------- fun fact4 n = foldl (op * ) 1 (range 1 n); =========== Haskel versions fact :: Int -> Int fact 0 = 1 fact n = n * fact (n-1) --------- fact :: Int -> Int fact 0 = 1 fact (n+1) = (n+1) * fact n --------- fact n = product [1 .. n]