(defmacro array (size) `(let ,(map (lambda (x) (list (fuse 'index x))) (create-indices size)) (dlambda (:get (i) (eval (fuse 'index i))) (:set (i value) (set (fuse 'index i) value))))) (defun create-indices (size) (create-indices-tail (- size 1) ())) (defun create-indices-tail (index accumulator) (if (< index 0) accumulator (recur (- index 1) (cons index accumulator))))