Оценивает ли экземпляр defstruct свои & ключевые аргументы? - PullRequest
1 голос
/ 13 ноября 2010

Я пытаюсь вложить экземпляры 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))

1 Ответ

4 голосов
/ 13 ноября 2010

'(y my) - это буквальный список, содержащий два символа - Y и MY.(list y my) создаст список из двух значений, первое - это значение переменной Y, второе - это значение переменной MY.То же самое с '('John x) - это буквальный список, который содержит два элемента - список (QUOTE JOHN) и символ X.

...