next up previous
Next: 5.6 問い合わせ部分 Up: 5 Prolog処理系の実現 Previous: 5.4 論理変数の調査

5.5 ホーン節の変数名の変更

ホーン節の中にあらわれる変数名を他のホーン節に出てこない名前に 変更する方法を示します.すべての変数名を異なる変数名にするために, シンボルを新たに作り出すgensymという組み込み関数を使うことが できます. gensymはシンボル表に登録しない変数を作り,それまでに生成したことの ないシンボルを作るように番号を付加しています.

<cl> (gensym "abc")
#:|abc2| 
<cl> (gensym "abc")
#:|abc3| 
<cl> (gensym "abc")
#:|abc4|
このgensymにより新たな変数を作り, ホーン節内にある論理変数との連想リストを作り, もとのホーン節をsublisすると目的とするものが得られます.

(defun rename-variables (x)
  (sublis
   (mapcar
    #'(lambda (var) (cons var (gensym (string var))))
    (variables-in x))
   x))

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

<cl> (rename-variables '(<- (carnivore ?x)
                            (human ?x) (eat ?x meat)))
(<- (CARNIVORE #:?X26) (HUMAN #:?X26) (EAT #:?X26 MEAT))

next up previous
Next: 5.6 問い合わせ部分 Up: 5 Prolog処理系の実現 Previous: 5.4 論理変数の調査
generated through LaTeX2HTML. M.Inaba 平成18年5月21日