我正在尝试将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))
答案 0 :(得分:4)
'(y my)
是一个包含两个符号的文字列表 - Y
和MY
。 (list y my)
会创建两个值的列表,第一个是变量Y
的值,第二个是变量MY
的值。 “('John x)
也是如此 - 它是一个包含两个元素的文字列表 - 列表(QUOTE JOHN)
和符号X
。