// // Using switch statement in ATS // Author: Hongwei Xi (October, 2005) // // HX-2010-08-12: after 5 years ... // HX-2010-08-12: just added staload _(*anon*) = "prelude/DATS/array.dats" staload _(*anon*) = "prelude/DATS/array0.dats" staload _(*anon*) = "prelude/DATS/reference.dats" (* staload "ATS/stdio.sats" // HX-2010-08-12: commented out *) 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 // end of [add_one] (* val '() = begin print_string "add_one (4) = "; print_int (add_one 4); print_newline () end *) // for loop (* staload Array = "ATS/Array/array.sats" // HX-2010-08-12: commented out *) fun fprint_array (out: FILEref, A: array0 (Nat)): void = let val n = array0_size A val n = size1_of_size (n) val n = int1_of_size1 (n) fun aux (i: Nat): void = if i ilt n then begin fprint_string (out, "A["); fprint_int (out, i); fprint_string (out, "] = "); fprint_int (out, array0_get_elt_at__intsz (A, i)); fprint_newline (out); aux (isucc i) end else () in aux (0) end // end of [fprint_array] val A: array0 (Nat) = array0_make_elt (8, 0) val () = fprint_array (stdout_ref, A) fun initialize1 (A: array0 (Nat)): void = let val n = array0_size A val n = size1_of_size (n) val n = int1_of_size1 (n) fun aux (i: Nat): void = if i ilt n then (array0_set_elt_at__intsz (A, i, i iadd i); aux (isucc i)) else () // end of [aux] in aux (0) end // end of [initialize1] val () = initialize1 (A) val () = fprint_array (stdout_ref, A) (* staload "ATS/reference.sats" // HX-2010-08-12: commented out *) fun initialize2 (A: array0 (Nat)): void = let val n = array0_size A val n = size1_of_size (n) val n = int1_of_size1 (n) val i = ref 0 in while (!i ilt n) begin array0_set_elt_at__intsz (A, !i, !i iadd !i iadd !i); !i := isucc !i end end // end of [initialize2] val () = initialize2 (A) val () = fprint_array (stdout_ref, A) (* ****** ****** *) implement main () = () // HX-2010-08-12: just added (* ****** ****** *) (* end of [demo31.dats] *)