J'essaye d'imbriquer des instances de defstructs comme certains des arguments clés & dans un autre defstruct, comme démontré par le code ci-dessous. Pour une raison quelconque, les variables à insérer dans la structure externe ne sont pas remplacées par les valeurs qui leur sont liées (ce à quoi je m'attendrais). Toutes les explications et/ou suggestions seraient appréciées.Est-ce que l'instanciation de defstruct évalue ses arguments & key?
(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))
Il peut être utile de lire un livre d'introduction Lisp plus basique. Comme la Terre de Lisp, ou Gentle Introduction de Touretzky. Ceux-ci expliquent les règles d'évaluation de base. –