Next: 5.3 ゴールの証明の流れ
Up: 5 Prolog処理系の実現
Previous: 5.1 データベースの実現
手続き
はデータベースに節を登録することを行なうため,add-clause関数
を呼び出すだけでよいことになります.
への引数は評価されないように
以下のようにマクロ表現します.
(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>
Next: 5.3 ゴールの証明の流れ
Up: 5 Prolog処理系の実現
Previous: 5.1 データベースの実現
generated through LaTeX2HTML. M.Inaba 平成18年5月21日