title: Does the defstruct instantiation evaluate its &key arguments?
body: <p>I'm trying to nest instances of defstructs as some of the &amp;key arguments in another defstruct, as demonstrated by the code below. For some reason, the variables to be inserted into the outer defstruct are not being replaced with the values bound to them (which is what I would expect). Any explanations and/or suggestions would be appreciated.</p>
  
  <pre><code>(defstruct (compound (:conc-name nil)) op args)
  (defstruct (var (:conc-name nil)) name)
  
  (let* ((x (make-var :name 'x))
         (y (make-var :name 'y))
         (my (make-compound :op 'Mother :args y))
         (s1 (make-compound :op 'knows :args '(y my)))
         (s2 (make-compound :op 'knows :args '('John x))))
    s1)
  
  =&gt; #S(COMPOUND :OP KNOWS :ARGS (Y MY))
  </code></pre>