SICP 4.4.3 Ex. 4.65

  • 投稿日:
  • カテゴリ:

Ex. 4.65

動作を追いかける。見やすくするため、人名、変数は短く書く。

パターン (wheel ?w)
規則の結論 (wheel ?p-1)

ユニファイしてできるフレーム

フレーム ((?w . ?p-1))

このフレームのもとで、規則の本体を作用させる

規則の本体
(and (supervisor ?m-1 ?p-1)  ・・・1. 
     (supervisor ?x-1 ?m-1)))  ・・・2.

1. とDBのパターンマッチでできるフレームストリーム

(
フレーム①((?w . ?p-1)(?m-1 . Alyssa)(?p-1 . Ben))
フレーム②((?w . ?p-1)(?m-1 . Cy)(?p-1 . Ben))
フレーム③((?w . ?p-1)(?m-1 . Lem)(?p-1 . Ben))
フレーム④((?w . ?p-1)(?m-1 . Louis)(?p-1 . Alyssa))
フレーム⑤((?w . ?p-1)(?m-1 . Ben)(?p-1 . Oliver))
フレーム⑥((?w . ?p-1)(?m-1 . Eben)(?p-1 . Oliver))
フレーム⑦((?w . ?p-1)(?m-1 . Robert)(?p-1 . Eben))
フレーム⑧((?w . ?p-1)(?m-1 . DeWitt)(?p-1 . Oliver)) 
)

最初のフレームがフレーム①〜フレーム⑧に拡張された。

次にANDなので、このフレームストリームを入力として 2. とDBのパターンマッチをする。

(
フレーム①((?w . ?p-1)(?m-1 . Alyssa)(?p-1 . Ben)(?x-1 . Louis))
フレーム②((?w . ?p-1)(?m-1 . Cy)(?p-1 . Ben) 失敗:?x-1にバインドできるものなし)
フレーム③((?w . ?p-1)(?m-1 . Lem)(?p-1 . Ben) 失敗:?x-1にバインドできるものなし)
フレーム④((?w . ?p-1)(?m-1 . Louis)(?p-1 . Alyssa) 失敗:?x-1にバインドできるものなし)
フレーム⑤-1((?w . ?p-1)(?m-1 . Ben)(?p-1 . Oliver)(?x-1 . Alyssa))
フレーム⑤-2((?w . ?p-1)(?m-1 . Ben)(?p-1 . Oliver)(?x-1 . Cy))
フレーム⑤-3((?w . ?p-1)(?m-1 . Ben)(?p-1 . Oliver)(?x-1 . Lem))
フレーム⑥((?w . ?p-1)(?m-1 . Eben)(?p-1 . Oliver)(?x-1 . Robert))
フレーム⑦((?w . ?p-1)(?m-1 . Robert)(?p-1 . Eben) 失敗:?x-1にバインドできるものなし)
フレーム⑧((?w . ?p-1)(?m-1 . DeWitt)(?p-1 . Oliver)失敗:?x-1にバインドできるものなし) 
)

フレーム⑤は拡張されてフレーム⑤-1、フレーム⑤-2、フレーム⑤-3の3つになった。

結局、パターンマッチが成功するのは

(
フレーム①((?w . ?p-1)(?m-1 . Alyssa)(?p-1 . Ben)(?x-1 . Louis))
フレーム⑤-1((?w . ?p-1)(?m-1 . Ben)(?p-1 . Oliver)(?x-1 . Alyssa))
フレーム⑤-2((?w . ?p-1)(?m-1 . Ben)(?p-1 . Oliver)(?x-1 . Cy))
フレーム⑤-3((?w . ?p-1)(?m-1 . Ben)(?p-1 . Oliver)(?x-1 . Lem))
フレーム⑥((?w . ?p-1)(?m-1 . Eben)(?p-1 . Oliver)(?x-1 . Robert))
)

の5つ。これらが印字される。なので ?w だけが印字されると、Oliverさんが無意味に4回もでてくるように見えるが、実際は、Oliverさんの陪臣が4人いるということを表している。