(def person (first last age)
(let self nil
(= self (obj
first first
last last
age age
full (fn () (string self!first " " self!last))
until (fn (year) (- year self!age))))))
Wow, that's much better! I didn't think that would work, since I thought that Arc's lexical scope bound variables in inner functions to the current value of those variables. Apparently I was wrong; thanks for the tip.