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人いるということを表している。