next up previous
Next: 5.5 ホーン節の変数名の変更 Up: 5 Prolog処理系の実現 Previous: 5.3 ゴールの証明の流れ

5.4 論理変数の調査

ホーン節の中に現れる論理変数のリストを作る関数を考える. 同じ論理変数名は何箇所にあらわれても一つとみなされるように 以下のように定義する.
(defun variables-in (exp)
  (unique-find-anywhere-if #'variable-p exp))

(defun unique-find-anywhere-if
  (predicate tree &optional result)
  (cond
   ((atom tree)
    (if (funcall predicate tree)
        (adjoin tree result)
      result))
   (t (unique-find-anywhere-if
       predicate
       (first tree)
       (unique-find-anywhere-if predicate (rest tree)
                                result)))))

<cl> (variables-in '(<- (carnivore ?x)
                    (human ?x) (eat ?x meat)))
(?X)


generated through LaTeX2HTML. M.Inaba 平成18年5月7日