// switch statement staload "ATS/stdio.sats" typedef five_t = [a:int | 0 <= a, a < 5] int a fun add_one (x: five_t): five_t = case x of | 0 => 1 | 1 => 2 | 2 => 3 | 3 => 4 | 4 => 0 (* val '() = begin print_string "add_one (4) = "; print_int (add_one 4); print_newline () end *) // for loop staload Array = "ATS/Array/array.sats" fun fprint_array (A: array (Nat), out: FILE): unit = let val n = $Array.length A fun aux (i: Nat): unit = if i ilt n then begin fprint_string ("A[", out); fprint_int (i, out); fprint_string ("] = ", out); fprint_int ($Array.get_at (A, i), out); fprint_newline (out); aux (isucc i) end else '() in aux (0) end val A: array (Nat) = $Array.make_with_elt (8, 0) val '() = fprint_array (A, stdout) fun initialize1 (A: array (Nat)): unit = let val n = $Array.length A fun aux (i: Nat): unit = if i ilt n then ($Array.set_at (A, i, i iadd i); aux (isucc i)) else '() in aux (0) end val '() = initialize1 (A) val '() = fprint_array (A, stdout) staload "ATS/reference.sats" fun initialize2 (A: array (Nat)): unit = let val n = $Array.length A val i: ref Nat = ref 0 in while (!i ilt n) begin $Array.set_at_exn (A, !i, !i iadd !i iadd !i); i := isucc !i end end val '() = initialize2 (A) val '() = fprint_array (A, stdout)