See a snippet of code:

(defstruct page address lang public source function)

(defmacro with-apache-address  (&whole source
                                (address &key lang public)
                                &body body)
  (let ((adr (gensym "address")))
    `(let ((,adr ,address))
      (setf (gethash ,adr *apache-address-table*)
       (make-page
        :address ,adr
        :lang ,lang
        :public ,public
        :source ',source
        :function (lambda (command)
                    (declare (ignorable command))
                    ,@body)))
      ;; return address
      ,adr)))
    

You can see the source of this below. I used standard double quotes instead of my reader hack to avoid the lisp reader transformation.


(defstruct page address lang public source function)

(defmacro with-apache-address  (&whole source
                                (address &key lang public)
                                &body body)
  (let ((adr (gensym "address")))
    `(let ((,adr ,address))
      (setf (gethash ,adr *apache-address-table*)
       (make-page
        :address ,adr
        :lang ,lang
        :public ,public
        :source ',source
        :function (lambda (command)
                    (declare (ignorable command))
                    ,@body)))
      ;; return address
      ,adr)))