;;;; Globals, 2-D fixed arrays, places, pointers, casts and match — the ;;;; milestone-2 surface calc-me does not reach. (defconst rows 3) (defconst cols 4) (defvar grid [rows [cols i32]]) (defvar total i32) (defconst pal [4 u32] [10 20 30 40]) (defstruct P [x i32 y i32]) (defstruct Line [a P b P]) (defn bump [p (Ptr P)] (set (.x p) (+ (.x p) 1))) (defn sum-grid [] i32 (let [t 0 r 0] (while (< r rows) (let [c 0] (while (< c cols) (set t (+ t (at grid r c))) (set c (+ c 1)))) (set r (+ r 1))) t)) (defn find [n i32] (Option i32) (if (> n 0) (Some (* n 2)) None)) (defn main [] i32 (set (at grid 1 2) 7) (set (at grid 0 0) 5) (set total (sum-grid)) (print total) (println "") ; 12 (print (at pal 2)) (println "") ; 30 (let [p (P {.x 1 .y 2})] ; :y omitted is zeroed (bump (addr p)) (print (.x p)) (println "") ; 2 (let [l (Line {.a p})] (print (.y (.a l))) (println ""))) ; 2 (print (/ 7 2)) (println "") ; 3 integer divide (print (/ (f64 7) 2.0)) (println "") ; 3.5 float divide (print (match (find 21) (Some v) v None 0)) (println "") ; 42 (print (match (find -1) (Some v) v None 99)) (println "") ; 99 (let [q (addr total)] (print (deref q)) (println "") ; 12 (set (deref q) 123) (print total) (println "")) ; 123 0)