(defmacro <- (&rest clause) `(add-clause ',clause))このマクロは,
(defmacro <- (&rest clause) (list 'add-clause (list 'quote clause)))と表現したのと同じ意味になります. これはマクロなので,
(<- (carnivore ?x) (human ?x) (eat ?x meat))が呼ばれると,
(add-clause '((carnivore ?x) (human ?x) (eat ?x meat)))という形に展開されます. この展開を調べるための手続きmacroexpandを試してみます.
<cl> (macroexpand '(<- (carnivore ?x) (human ?x) (eat ?x meat))) (ADD-CLAUSE '((CARNIVORE ?X) (HUMAN ?X) (EAT ?X MEAT))) T <cl>