62 lines
1.3 KiB
Text
62 lines
1.3 KiB
Text
(* ****** ****** *)
|
|
//
|
|
#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] *)
|
|
|
|
(* ****** ****** *)
|