(defstruct Enemy [hp i32 name string]) (defvar spawned i32) (defconst room-size 4) (defvar room [room-size i32]) ;; `set` takes a fixed list of forms, not an extensible setf. (defn main [] () (let [e (Enemy {.hp 10 .name "slime"}) p (addr e)] (set spawned (+ spawned 1)) ; a local or a defvar (set (.hp e) 7) ; a struct field (set (.hp p) 8) ; through a (Ptr Enemy) — derefs one level (set (at room 2) 5) ; a fixed array or slice element (set (deref p) (Enemy {.hp 3 .name "wisp"})) ; a whole-object store (print (.hp e)) (println "") (println (.name e)) (print (at room 2)) (println "") (print spawned) (println "")))