Я пытаюсь вложить экземпляры defstructs в качестве некоторых аргументов & key в другой defstruct, как показано в приведенном ниже коде. По какой-то причине переменные, которые будут вставлены во внешнюю defstruct, не заменяются связанными с ними значениями (что я и ожидал). Будем благодарны за любые объяснения и / или предложения.
(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)
=> #S(COMPOUND :OP KNOWS :ARGS (Y MY))