Ex. 4.79
束縛変数をすべて局所的環境におきかえる。なんていう壮大な計画は没。
変数の名前を替える(rename-variables-in)を呼び出していたのは、ruleの本体の処理 (apply-a-rule) のところである。
この処理だけ、局所的環境を使うようにする。また、束縛変数を1つづつではなく、frame ごと局所的環境におくようにする。
ブロック構造の手続きというのは、処理をサブルーチンに分けること
(sub (sub1 ...) (sub2 ...))
こういうの。queryシステムだと、rule の中から別の rule を呼び出すこと。
実際に、名前の衝突が起こるのは、rule呼び出しの引数名しかない。(ruleにローカル変数ないし)
ここから、問題が別になっている。
(原文 "Can you relate any of this to the problem of ..." 局所的環境版でも名前変更版でも、どちらかを使って、次の問題を解け、、、)
"文脈の中で推論"について
「P が真ならば A と B を推論する」というのは、AとBに関するルール
ルール①PならばA (rule1 A P) ルール②PならばB (rule2 B P)
があるとき、Pを真にするフレーム (...frameP...) のもとでこれらのルールを評価するということである。
文脈というのは、この frameP を指すと思われる。
frameP のもとで推論可能な ルール①、ルール② が最初から選ばれているわけではないので、全ルールを総なめして、ルール①、ルール② を探さなければいけない。
ここで要求されているのは、このルールの検索プログラムを作れということだと思われる。
と思ったけど、これだけだと未解決でもなんでもない唯の検索問題になる、、、?
ということで、未解決問題"AIのフレーム問題"に絡めてみよう。(これしか知らんし)
例えば、rule が 10000個もあったら全ルールを総なめにするというのはとても重い作業だ。
さらに推論を重ねる場合、この総なめ作業はどんどん増えていく。
frameP で推論(10000個総なめ) → 結果Aをフレームとしてさらに推論(10000個総なめ) 結果Cをフレームとしてさらに推論(10000個総なめ) ... 結果Bをフレームとしてさらに推論(10000個総なめ) 結果Dをフレームとしてさらに推論(10000個総なめ) ...
たとえば、結果が末端にいくまで10回推論を重ねる必要があって、推論の度に2個づつ結論ができる場合、2の9乗 * 10000 = 500万個 総なめしないといけない。
なので、この重い作業をなんとかしろという問題だと解釈する。