では次に,以下の問題を解くモデルに拡張しよう。このモデルを解くためには,上位の桁からCarryを受け渡す処理が必要になる。実際に,自分がどのような計算処理をしているのかを内省しながら,モデルを構成してゆこう。
9008 -3149 ----- ????
ゴール遷移は,Basic ModelにCarry処理に関わるゴールが加わることになる。
ゴールの遷移に伴う問題の処理のプロセスは以下のようになる。赤→はFocus行,青→はProcessing行を指している。
一つひとつのゴールに対応づけて,ルールを記述してゆく。以下に具体例を示す。
■FindDifference2
IF
ゴールがFindDifferenceで,
Processing行(=Focus行)の上の数字が下の数字より小さければ,
THEN
ゴールをLeftCarryに変更せよ。
IF節■LeftCarry
(Goal FindDifference) (Processing ?C) (Focus ?C) (Slot ?Nlower # #) (Slot ?Nupper # #) (*test-smaller # #) THEN節 (*delete (Goal FindDifference)) (*deposit (Goal LeftCarry))
IF
ゴールがLeftCarryで,
Focus行がの左の行が見つかれば,
THEN
ゴールをGetCarryに変更し,
その行を新たなFocus行とせよ。
IF節 (Goal LeftCarry) (Focus ?C) (Leftof ?Cleft #) THEN節 (*delete (Goal LeftCarry)) (*deposit (Goal GetCarry)) (*delete (Focus ?C)) (*deposit (Focus #))■GetCarry1
IF
ゴールがGetCarryで,
Focus行の上の数字が0でなく,
その数字から1を引いた数字が見つかり,
Focus行の右の行が見つかれば,
THEN
ゴールをPutCarryに変更し,
現在のFocus行にその1を引いた数字に変更し,
右の行を新たなFocus行とせよ。
IF節 (Goal GetCarry) (Focus ?Cfocus) (Slot ?N # ROWUPPER) (*test-not-equal ?N #) (Sum # ?Nsubone ?N) (Leftof ?Cfocus ?Cfocusright) THEN節 (*delete (Goal GetCarry)) (*deposit (Goal #)) (*delete (Slot ?N ?Cfocus ROWUPPER)) (*deposit (Slot # ?Cfocus ROWUPPER)) (*delete (Focus ?Cfocus)) (*deposit (Focus #))■GetCarry2
IF
ゴールがGetCarryで,
Focus行の上の数字が0ならば,
THEN
ゴールをLeftCarryに変更せよ。
IF節 (Goal GetCarry) (Focus ?Cfocus) (Slot ?N # ROWUPPER) (*test-equal ?N #) THEN節 (*delete (Goal GetCarry)) (*deposit (Goal #))■PutCarry1
IF
ゴールがPutCarryで,
Focus行とProcessing行が一致していて,
その行の上の数字に10を足した数字が見つかれば,
THEN
ゴールをFindDifferenceに変更し,
上の数字をその10を足した数字に置き換えよ。
IF節 (Goal PutCarry) (Processing ?CProcessing) (Focus ?CFocus) (*test-equal # #) (Slot # # #) (Sum # ?N ?Naddten) THEN節 (*delete (Goal PutCarry)) (*deposit (Goal #)) (*delete (Slot # # #)) (*deposit (Slot # # #))■PutCarry2
IF
ゴールがPutCarryで,
Focus行とProcessing行が一致せず,
その行の上の数字に10を足した数字が見つかれば,
THEN
ゴールをGetCarryに変更し,
上の数字をその10を足した数字に置き換えよ。
IF節 (Goal PutCarry) (Processing ?CProcessing) (Focus ?CFocus) (*test-not-equal # #) (Slot # # #) (Sum # ?N ?Naddten) THEN節 (*delete (Goal PutCarry)) (*deposit (Goal #)) (*delete (Slot # # #)) (*deposit (Slot # # #))