Extended Model


問題

では次に,以下の問題を解くモデルに拡張しよう。このモデルを解くためには,上位の桁からCarryを受け渡す処理が必要になる。実際に,自分がどのような計算処理をしているのかを内省しながら,モデルを構成してゆこう。

 9008
-3149
-----
 ????


問題

ゴール遷移は,Basic ModelにCarry処理に関わるゴールが加わることになる。



処理プロセス

ゴールの遷移に伴う問題の処理のプロセスは以下のようになる。赤→はFocus行,青→はProcessing行を指している。



ルール

一つひとつのゴールに対応づけて,ルールを記述してゆく。以下に具体例を示す。

■FindDifference2

IF
ゴールがFindDifferenceで,
Processing行(=Focus行)の上の数字が下の数字より小さければ,
THEN
ゴールをLeftCarryに変更せよ。

IF節
(Goal FindDifference) (Processing ?C) (Focus ?C) (Slot ?Nlower # #) (Slot ?Nupper # #) (*test-smaller # #) THEN節 (*delete (Goal FindDifference)) (*deposit (Goal LeftCarry))
■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 # # #))