zigzag(n) := block([a, i, j], a: zeromatrix(n, n), i: 1, j: 1, for k from 0 thru n*n - 1 do ( a[i, j]: k, if evenp(i + j) then ( if j < n then j: j + 1 else i: i + 2, if i > 1 then i: i - 1 ) else ( if i < n then i: i + 1 else j: j + 2, if j > 1 then j: j - 1 ) ), a)$ zigzag(5); /* matrix([ 0, 1, 5, 6, 14], [ 2, 4, 7, 13, 15], [ 3, 8, 12, 16, 21], [ 9, 11, 17, 20, 22], [10, 18, 19, 23, 24]) */