Lisp defstruct实例化是否评估其&;关键论点?

Lisp defstruct实例化是否评估其&;关键论点?,lisp,common-lisp,Lisp,Common Lisp,我试图将defstructs实例嵌套为另一个defstruct中的一些&key参数,如下代码所示。出于某种原因,要插入外部defstruct的变量没有被绑定到它们的值替换(这是我所期望的)。如有任何解释和/或建议,将不胜感激 (defstruct (compound (:conc-name nil)) op args) (defstruct (var (:conc-name nil)) name) (let* ((x (make-var :name 'x)) (y (make-v

我试图将defstructs实例嵌套为另一个defstruct中的一些&key参数,如下代码所示。出于某种原因,要插入外部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))

”(y my)
是一个文本列表,包含两个符号-
y
my
(list y my)
将创建两个值的列表,第一个是变量
y
的值,第二个是变量
my
的值。“
('John x)
”也是一样,它是一个包含两个元素的文本列表-一个列表
(引用John)
和一个符号
x

”(y my)
是一个包含两个符号的文本列表-
y
my
(list y my)
将创建两个值的列表,第一个是变量
y
的值,第二个是变量
my
的值。“
('John x)
”也是一样-它是一个包含两个元素的文本列表-一个列表
(引用John)
和一个符号
x

阅读一些更基本的Lisp介绍书可能会有所帮助。就像Lisp之地,或者Touretzky的温柔介绍。这些解释了基本的求值规则。阅读一些更基本的Lisp入门书可能会有所帮助。就像Lisp之地,或者Touretzky的温柔介绍。这些解释了基本的评估规则。啊!我认为'()和(列表)符号是等价的。谢谢你的澄清!啊!!我认为'()和(列表)符号是等价的。谢谢你的澄清!