(* ****** ****** *) // #include "share/atspre_define.hats" // defines some names #include "share/atspre_staload.hats" // for targeting C #include "share/HATS/atspre_staload_libats_ML.hats" // for ... // (* ****** ****** *) // extern fun Zig_zag_matrix(n: int): void // (* ****** ****** *) fun max(a: int, b: int): int = if a > b then a else b fun movex(n: int, x: int, y: int): int = if y < n-1 then max(0, x-1) else x+1 fun movey(n: int, x: int, y: int): int = if y < n-1 then y+1 else y fun zigzag(n: int, i: int, row: int, x: int, y: int): void = if i = n*n then () else let val () = (if x = row then begin print i; print ','; end else ()) //val () = (begin print x; print ' '; print y; print ' '; print i; print ' '; end) val nextX: int = if ((x+y) % 2) = 0 then movex(n, x, y) else movey(n, y, x) val nextY: int = if ((x+y) % 2) = 0 then movey(n, x, y) else movex(n, y, x) in zigzag(n, i+1, row, nextX, nextY) end implement Zig_zag_matrix(n) = let fun loop(row: int): void = if row = n then () else let val () = zigzag(n, 0, row, 0, 0) val () = println!(" ") in loop(row + 1) end in loop(0) end (* ****** ****** *) implement main0() = () where { val () = Zig_zag_matrix(5) } (* end of [main0] *) (* ****** ****** *)