How retarded, look at Clojure instead
something like:
(defdata mountain name :setter :getter latitude :getter etc ...)
might not be too hard to implement on top of clos (or on top of defstruct - but clos has the advantage of already having flexible accessors) not sure about clojure.
(defstruct mountain :name :latitude :longitude :country)
(struct mountain "Zugspitze" 47.416667 10.983333 "Germany")