(* finished and correct, for ever *) fun evens([]) = [] | evens([value]) = [value] | evens(first::second::rest) = first :: evens(rest); val test = [3, 0, 1, ~5, 8]; (* Computes n!, or 1 * 2 * 3 * ... * n-1 * n. Precondition: n >= 0. *) fun factorial(0) = 1 | factorial(n) = n * factorial(n - 1); fun fibonacci(1) = 1 | fibonacci(2) = 1 | fibonacci(n) = fibonacci(n - 1) + fibonacci(n - 2); (* an inexhaustive pattern *) fun silly(0) = 1; (* The distance between points (x1,y1),(x2,y2). *) fun dist(x1, y1, x2, y2) = let val dx = x2 - x1 val dy = y2 - y1 val dy2 = dy * dy in Math.sqrt(dx * dx + dy2) end;