25 lines
677 B
Text
25 lines
677 B
Text
(define odd? A -> (= 1 (MOD A 2)))
|
|
(define even? A -> (= 0 (MOD A 2)))
|
|
|
|
(define zigzag-val
|
|
0 0 N -> 0
|
|
|
|
X 0 N -> (1+ (zigzag-val (1- X) 0 N)) where (odd? X)
|
|
X 0 N -> (1+ (zigzag-val (1- X) 1 N))
|
|
|
|
0 Y N -> (1+ (zigzag-val 1 (1- Y) N)) where (odd? Y)
|
|
0 Y N -> (1+ (zigzag-val 0 (1- Y) N))
|
|
|
|
X Y N -> (1+ (zigzag-val (MAX 0 (1- X)) (MIN (1- N) (1+ Y)) N)) where (even? (+ X Y))
|
|
X Y N -> (1+ (zigzag-val (MIN (1- N) (1+ X)) (MAX 0 (1- Y)) N)))
|
|
|
|
(define range
|
|
E E -> []
|
|
S E -> [S|(range (1+ S) E)])
|
|
|
|
(define zigzag
|
|
N -> (map (/. Y
|
|
(map (/. X
|
|
(zigzag-val X Y N))
|
|
(range 0 N)))
|
|
(range 0 N)))
|