CLIPS超入門3(ルールと推論エンジン1)

CLIPSルール、ファクト、アジェンダ

CLIPSのルール

ワーキングメモリの必要最小限の操作ができるようになったところで、次にルールを書いて見ましょう。

一般的なルールの形は、

(defrule  <ルール名>  ”コメント”
  <Left Hand Side=LHS:条件部>
=>
    <Right Hand Side=RHS:結論部>
)

この形に従って、非常に簡単なルールを書いてみましょう。 

ルールサンプル1 

(defrule rule-room
    (room)
=>
    (printout  t  “There is a room.” crlf)

このルールは、 もし、(room)というfactがあったら(条件部にマッチするfactがあったら)、There is a room.と表示する、と読みます。

ルールは、そのまま対話環境から直接入力してもよいのですが、入力ミスをしたときの修正が難しいので、外部のテキストエディタでルールを記述し、それをCLIPSに読み込むようにしてみましょう。

上 記ルールを、sample1.clp(.clpはCLIPSのルールファイルの拡張子) というテキストファイルに入力し、CLIPSをあらためて立ち上げ、CLIPSのFile-Loadメニューから読み込んでみましょう。ここで、True が返ってくれば、ルールの読み込みに成功したということです。

ここで、先に進む前に、Factsウィンドウと、Agendaウィンドウを表示しておきましょう。どちらもWindowメニューの該当箇所を選択すれば表示できます。

Facts ウィンドウにまだ何も表示されていない段階で、まず(room)ファクトを書き込んでみましょう。assertを用いて、書き込んでみてください。すると factsウィンドウに(room)というファクトが表示されるほか、 左下のAgendaウィンドウに、rule-roomというルール名と、(room)のfact-indexにあたる、f-0が表示されていることがわか るで しょう。

 CLIPSルール、ファクト、アジェンダ

Agendaウィンドウに表示される、このルール名とファクトの組は、これから実行されようとしているルール(とファクトの組)の候補となります。ここで、CLIPSのメニューExecution-Runか

CLIPS>(run)

というコマンドを実行すると、このルールが実行され、ルールの結論部に書かれているアクションによって、”There is a room.”が表示されます。

最後に、ファクトやルールを操作するよく使うコマンドをあげておきましょう。

(reset)
 現在、ワーキングメモリに書かれているファクトをすべてクリアし、(initial-fact)というファクトを作るコマンド。(なぜ、クリアするだけでないかというと、・・・ルールベースの場合、プログラムを実行するには、何らかのファクトがないと実行できないため、resetする際、常に(initial-fact)という決まったファクトを作っておくと便利であるから)

(list-defrules)
 現在、読み込まれているルールのルール名一覧

(ppdefrule <ルール名>)
 ルール名で指定されるルールを表示する