next up previous
Next: 2.7 競合解消(conflict resolution) Up: 2 プロダクションシステム Previous: 2.5 推論エンジン

2.6 条件部の照合

条件部はいくつかの条件から成り,以下のように条件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 up previous
Next: 2.7 競合解消(conflict resolution) Up: 2 プロダクションシステム Previous: 2.5 推論エンジン
generated through LaTeX2HTML. M.Inaba 平成18年5月21日