Next: 2.7 競合解消(conflict resolution)
Up: 2 プロダクションシステム
Previous: 2.5 推論エンジン
条件部はいくつかの条件から成り,以下のように条件1から順にmatch関数に
より変数のバインディング環境を次の条件に順に引き継いでmatchを適用しま
す.
(defun fail (environment)
(eq environment 'fail))
(defun match-antecedent
(antecedent memory &optional environment)
(cond ((or (null antecedent)
(fail environment))
environment)
(t (match-antecedent
(cdr antecedent)
memory
(match* (car antecedent)
memory environment 'fail)))))
(defun match*
(pattern patterns environment
last-matched-environment)
(cond ((null patterns)
last-matched-environment)
((not (fail last-matched-environment))
last-matched-environment)
(t (match*
pattern
(cdr patterns)
environment
(match pattern
(car patterns) environment)))))
この方法だと,もし引き継がれていった順番が悪いと途中でmatchが失敗し,
そのルールは候補とはならなくなります.
それは,マッチが失敗した時点で別のバインデイング対応に対して
も調べ直すといったバックトラックを行っていないからです.
変数を含んだ条件要素と作業記憶のデータとの照合には
最初に述べたmatchを使っています.
Next: 2.7 競合解消(conflict resolution)
Up: 2 プロダクションシステム
Previous: 2.5 推論エンジン
generated through LaTeX2HTML. M.Inaba 平成18年5月21日