next up previous
Next: 5.3 ゴールの証明の流れ Up: 5 Prolog処理系の実現 Previous: 5.1 データベースの実現

5.2 データベースへの登録

手続き$<-$はデータベースに節を登録することを行なうため,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 up previous
Next: 5.3 ゴールの証明の流れ Up: 5 Prolog処理系の実現 Previous: 5.1 データベースの実現
generated through LaTeX2HTML. M.Inaba 平成18年5月21日