The #Common-Lisp approach to defining #records is that after you (defstruct point x y) you can (let ((p (make-point :x 3 :y 4))) (setf (point-x p) 5) p) which prints as #S(POINT :X 5 :Y 4), which is also valid read syntax. There are of course optional keyword arguments to override every part of this.
notes on hacking #Chez #Scheme and #SBCL #Common-Lisp, with special attention to startup times
on 02023-07-09how #Common-Lisp CLOS object types are printed by default (#ebook "Common Lisp Cookbook")
on 02022-10-14how to use defstruct in #Common-Lisp #Lisp (from #ebook of Common Lisp: The Language, 2nd ed.)
on 02022-10-14what #Common-Lisp fashions in 02020 are
on 02021-02-09