(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))))