次にプロダクションシステムの主要な要素の一つであるワーキングメモリについて、メモリへの書き込み(記憶)と消去(忘却)をやってみましょう。CLIPSでは、ワーキングメモリの要素をfactと呼びます。
factの例
(duck)
(LISP)
(Lisp Java)
(C Language Integrated Production System)
こ のように、()で囲まれた単語の列がfactとなります(なお、この他に(employee (name “Nonaka”) (employee-code “K14373”)) といったように、クラスのインスタンスのようにfactを記述する方法もありますが、ここでは最短距離でルールベースの概念を一通り説明するために、ここ では、ひとまず上記の記述の仕方のみを扱います)。
さてここで、以下の代表的なワーキングメモリを操作する関数(function)、
- (facts) ワーキングメモリの内容を表示する(factsウィンドウを開くことでもワーキングメモリの内容を表示することが可能)
- (assert <fact>) <fact>をワーキングメモリに書き込む
- (retract <fact-specifier>) <fact-specifier>(factのインデックス等)で特定されるfactをワーキングメモリから消去する
を用いて、CLIPSのワーキングメモリを操作してみましょう。
assertとfacts
factをワーキングメモリに書き込む関数が、assertです。CLIPSのプロンプトに続けて、
(assert (C Language Integrated Production System))
という関数を打ち込んでみましょう。すると、<Fact-0>という表示がされ、再びプロンプトがあらわれます。これは、ワーキングメモリの(factのインデクス)0番に上記のfactが登録されたことを意味しています。
次に、
(facts)
と打ち込んで、現在のワーキングメモリの状態を見てみましょう。すると、
f-0 (C Language Integrated Production System)
For a total of 1 fact
という表示がされるはずです。
また、factの内容をモニタするウィンドウを開いておくと、リアルタイムでワーキングメモリの内容を見ることができます。
retract
次に登録されたfactを消去するretract関数を見てみましょう。プロンプトに続けて
(retract 0)
と入力してみましょう。これは、ワーキングメモリ中、0番に登録された(インデクスが0番の)factが消去されます。ここで(facts)を入力しても何も表示されないのを確認しておきます。