ここでは,以下の引き算を解くモデルを構築しよう。
876 -123 ---- ???
まず,ワーキングメモリは,以下のようになる。
(Slot 8 COLUMN3 ROWUPPER)ROWUPPERは上段を示し,ROWLOWERは下段を示す。COLUMNは,右から数えて何列目かを示す。この例では,右から数えて3番目の行の上段に,8という数字が入っていることを示している。
(Leftof COLUMN2 COLUMN1)ある列の左側にどの列が来ているかを現す。
(Leftmost COLUMN3)3列目が一番左側の列であること,つまり3桁の加算の問題であることを示す。
(Sum 3 5 8)システムは1桁の加算の知識を持っている。この例では,3と5を足すと8になることを示している。
(Processing COLUMN1)どの行を現在処理しているのかを示す。処理は一番右のCOLUMN1から始まり,順次右の行へと推移してゆく。
(Focus COLUMN1)
以下が,ワーキングメモリの初期状態の内容である。
(Goal FindDifference) (Slot 8 COLUMN3 ROWUPPER) (Slot 7 COLUMN2 ROWUPPER) (Slot 6 COLUMN1 ROWUPPER) (Slot 1 COLUMN3 ROWLOWER) (Slot 2 COLUMN2 ROWLOWER) (Slot 3 COLUMN1 ROWLOWER) (Answer EMPTY COLUMN1) (Answer EMPTY COLUMN2) (Answer EMPTY COLUMN3) (Leftof COLUMN2 COLUMN1) (Leftof COLUMN3 COLUMN2) (Leftmost COLUMN3) (Processing COLUMN1) (Focus COLUMN1) (Sum 0 0 0) (Sum 0 1 1) (Sum 0 2 2) (Sum 0 3 3) (Sum 0 4 4) (Sum 0 5 5) (Sum 0 6 6) (Sum 0 7 7) (Sum 0 8 8) (Sum 0 9 9) (Sum 0 10 10) (Sum 1 0 1) (Sum 1 1 2) (Sum 1 2 3) (Sum 1 3 4) (Sum 1 4 5) (Sum 1 5 6) (Sum 1 6 7) (Sum 1 7 8) (Sum 1 8 9) (Sum 1 9 10) (Sum 1 10 11) (Sum 2 0 2) (Sum 2 1 3) (Sum 2 2 4) (Sum 2 3 5) (Sum 2 4 6) (Sum 2 5 7) (Sum 2 6 8) (Sum 2 7 9) (Sum 2 8 10) (Sum 2 9 11) (Sum 2 10 12) (Sum 3 0 3) (Sum 3 1 4) (Sum 3 2 5) (Sum 3 3 6) (Sum 3 4 7) (Sum 3 5 8) (Sum 3 6 9) (Sum 3 7 10) (Sum 3 8 11) (Sum 3 9 12) (Sum 3 10 13) (Sum 4 0 4) (Sum 4 1 5) (Sum 4 2 6) (Sum 4 3 7) (Sum 4 4 8) (Sum 4 5 9) (Sum 4 6 10) (Sum 4 7 11) (Sum 4 8 12) (Sum 4 9 13) (Sum 4 10 14) (Sum 5 0 5) (Sum 5 1 6) (Sum 5 2 7) (Sum 5 3 8) (Sum 5 4 9) (Sum 5 5 10) (Sum 5 6 11) (Sum 5 7 12) (Sum 5 8 13) (Sum 5 9 14) (Sum 5 10 15) (Sum 6 0 6) (Sum 6 1 7) (Sum 6 2 8) (Sum 6 3 9) (Sum 6 4 10) (Sum 6 5 11) (Sum 6 6 12) (Sum 6 7 13) (Sum 6 8 14) (Sum 6 9 15) (Sum 6 10 16) (Sum 7 0 7) (Sum 7 1 8) (Sum 7 2 9) (Sum 7 3 10) (Sum 7 4 11) (Sum 7 5 12) (Sum 7 6 13) (Sum 7 7 14) (Sum 7 8 15) (Sum 7 9 16) (Sum 7 10 17) (Sum 8 0 8) (Sum 8 1 9) (Sum 8 2 10) (Sum 8 3 11) (Sum 8 4 12) (Sum 8 5 13) (Sum 8 6 14) (Sum 8 7 15) (Sum 8 8 16) (Sum 8 9 17) (Sum 8 10 18) (Sum 9 0 9) (Sum 9 1 10) (Sum 9 2 11) (Sum 9 3 12) (Sum 9 4 13) (Sum 9 5 14) (Sum 9 6 15) (Sum 9 7 16) (Sum 9 8 17) (Sum 9 9 18) (Sum 9 10 19) (Sum 10 0 10) (Sum 10 1 11) (Sum 10 2 12) (Sum 10 3 13) (Sum 10 4 14) (Sum 10 5 15) (Sum 10 6 16) (Sum 10 7 17) (Sum 10 8 18) (Sum 10 9 19) (Sum 10 10 20)
さて,最後に,Goalについて示す。
Goalは,次にどのような処理を行うのかの目標である。この筆算の問題の場合,以下の3つのGoalを考える。
これら3つのゴールが,以下のように遷移してゆくことによって,この筆算の問題は最終的に解決することになる。
ゴールの遷移に伴う問題の処理のプロセスは以下のようになる。赤→はFocus行,青→はProcessing行を指している。
一つひとつのゴールに対応づけて,ルールを記述してゆく。以下に具体例を示す。
■FindDifference
IF
ゴールがFindDifferenceで,
Processing行(=Focus行)の上の数字が下の数字以上ならば,
THEN
ゴールをWriteAnswerに変更せよ。
IF節 (Goal FindDifference) (Processing ?C) (Focus ?C) (Slot ?Nlower ?C ROWLOWER) (Slot ?Nupper ?C ROWUPPER) (*test-greater-or-equal ?Nupper ?Nlower) THEN節 (*delete (Goal FindDifference)) (*deposit (Goal WriteAnswer))■WriteAnswer
IF
ゴールがWriteAnswerで,
Processing行(=Focus行)の上の数字と下の数字の差が見つかれば,
THEN
ゴールをShiftColumnに変更し,
その数字をProcessing行の答に書き込め。
IF節 (Goal WriteAnswer) (Processing ?C) (Slot # # #) (Slot # # #) (Sum # # #) THEN節 (*delete (Goal WriteAnswer)) (*deposit (Goal #)) (*delete (Answer EMPTY ?C)) (*deposit (Answer # ?C))<<参考>>
このモデルでは,差は,working memoryの中の1桁の足し算の知識を参照することで求められる。
例えば,B - Aを求める時には,メモリの中から,
(Sum A ?a B)
もしくは
(Sum ?a A B)にマッチする?aを求めることになる。
IF
ゴールがShiftColumnで,
Processing行(=Focus行)の左の行が見つかれば,
THEN
ゴールをFindDifferenceに変更し,
その行を新たなProcessing行,およびFocus行とせよ。
IF節 (Goal ShiftColumn) (Processing #) (Focus #) (Leftof # #) THEN節 (*delete (Goal ShiftColumn)) (*deposit (Goal #)) (*delete (Processing #)) (*deposit (Processing #)) (*delete (Focus #)) (*deposit (Focus #))■Completed
IF
Processing行が一番左の行で,
すでにその行の答が埋められていれば,
THEN
システムを停止せよ。
IF節 (Processing ?C) (# ?C) (Answer # #) (*test-not-equal # EMPTY) THEN節 (*halt)