(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-i64 (i64 (.hp e))) (newline) (print-line (.name e)) (print-i64 (i64 (at room 2))) (newline) (print-i64 (i64 spawned)) (newline)))