(require :asdf) (require :alexandria) (in-package :CL-USER) (defmacro capture-read (&body body) `(with-input-from-string (*standard-input* (with-output-to-string (*standard-output*) ,@body)) (read))) (defgeneric (setf form) (o v)) (defclass eve () (form)) (defmethod parthenogenesis ((obj eve) &aux (class (class-name (class-of obj)))) (eval `(defmethod parthenogenesis :around ((obj ,class)) (capture-read (format t " (let ((form '~s)) (let ((particular-quine (eval form))) (setf (form particular-quine) form) (values particular-quine))) " (form obj))))) (parthenogenesis obj)) (defun form-eve () (let ((form '(macrolet ((ana-quine-class ((&rest class-paraphernalia) &body body) (alexandria:with-gensyms (classname) `(let ((quine (defclass ,classname ,@class-paraphernalia))) ,@body)))) (ana-quine-class ((eve) ((form :accessor form)) (:documentation " . . . ")) (values (make-instance quine)))))) (let ((particular-quine (eval form))) (setf (form particular-quine) form) (values particular-quine))))