1
我试图将嵌套的实例嵌套为另一个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))
这可能有助于阅读一些更基本的Lisp入门书。像Lisp的土地,或Touretzky的温柔介绍。这些解释了基本评估规则。 – 2010-11-13 09:14:43