defstruct实例化是否评估其& key参数?

时间:2010-11-13 03:37:45

标签: 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-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))

1 个答案:

答案 0 :(得分:4)

'(y my)是一个包含两个符号的文字列表 - YMY(list y my)会创建两个值的列表,第一个是变量Y的值,第二个是变量MY的值。 “('John x)也是如此 - 它是一个包含两个元素的文字列表 - 列表(QUOTE JOHN)和符号X