Next: 2.11 実行例(3)
Up: 2 プロダクションシステム
Previous: 2.9 実行例(1)
haltで終了する例を次に示します.これは2桁の数の引き算を行なう例です.
たとえば,83から25を引くという例において,この引き算を
(sub 8 3 2 5)というように表現しています.
(defun rule-demo2 (&optional (*verbose* nil))
(set-up-rules
'two-column-subtraction
'((r1 ==>
(7 2 5) (8 4 4) (4 3 1) (6 2 4)
(8 1 7) (7 4 3) (7 1 6)
(add10 7 17) (add10 3 13) (13 5 8))
(r2 (sub ?tl ?tr ?bl ?br)
==>
(nbondr ?tr ?br) (nbondl ?tl ?bl))
(r3 (nbondr ?tr ?br) (nbondl ?tl ?bl)
(?tr ?br ?a1) (?tl ?bl ?a2)
==>
(answer ?a2 ?a1))
(r4 (answer ?x ?y)
==>
(%%halt%%))
(r5 (sub ?tl ?tr ?bl ?br)
(add10 ?tr ?newtr)
(?tl 1 ?newtl)
==>
(sub ?newtl ?newtr ?bl ?br))))
(ps 'two-column-subtraction '((sub 8 3 2 5)) nil)
)
ルールにでてくる(7 2 5)などのような(a b c)は,a から b を引くと c にな
るという意味です.
下位の桁で引けない場合には,10を足して引き,上位の桁の数から1を引く
という計算になりますが,これはルール r5 で表されています.
nbondrは下位の桁の引き算を行ない,nbondlは上位の引き算を行なうという
ものです.
条件部がなにもないルールr1があります.これは次の実行例にあるようにただ
単にデータを行動部のインスタンスを作業領域に付加するだけになります.
終了条件は,r4にあるように(answer ?x ?y)というデータが作業記憶に現れる
ということです.answerは r3 の条件がなり立てば生成されます.
<cl> (rule-demo2 t)
0: rule R2 adds ((NBONDR 3 5) (NBONDL 8 2)).
SIMPLEST-INSTANTIATIONS effects.
(R1 R2) -> (R2).
FIND-FIRST effects.
(R2) -> R2.
1: rule R1 adds
((7 2 5) (8 4 4) (4 3 1) (6 2 4) (8 1 7) (7 4 3)
(7 1 6) (ADD10 7 17) (ADD10 3 13) (13 5 8)).
FIREABLE-RULES effects.
(R1 R2) -> (R1).
FIND-FIRST effects.
(R1) -> R1.
2: rule R5 adds ((SUB 7 13 2 5)).
FIREABLE-RULES effects.
(R1 R2 R5) -> (R5).
FIND-FIRST effects.
(R5) -> R5.
3: rule R2 adds ((NBONDR 13 5) (NBONDL 7 2)).
FIREABLE-RULES effects.
(R1 R2) -> (R2).
FIND-FIRST effects.
(R2) -> R2.
4: rule R3 adds ((ANSWER 5 8)).
FIREABLE-RULES effects.
(R1 R2 R3) -> (R3).
FIND-FIRST effects.
(R3) -> R3.
Rule Interpreter Halted
Halt Signalled
Here are contents of working memory:
((%%HALT%%)
(ANSWER 5 8)
(NBONDR 13 5)
(NBONDL 7 2)
(SUB 7 13 2 5)
(7 2 5)
(8 4 4)
(4 3 1)
(6 2 4)
(8 1 7)
(7 4 3)
(7 1 6)
(ADD10 7 17)
(ADD10 3 13)
(13 5 8)
(NBONDR 3 5)
(NBONDL 8 2)
(SUB 8 3 2 5))
NIL
ここで,r1の行動部インスタンスがr2のものより長い(アトムが多い)ため,
最初にr2が発火しています.
ここでのルールは,83から25を引くためのルールになっています.任意の2桁
の数どうしの引き算ではもっと多くのルールが必要です.
Next: 2.11 実行例(3)
Up: 2 プロダクションシステム
Previous: 2.9 実行例(1)
generated through LaTeX2HTML. M.Inaba 平成18年5月21日