=> ) この形に従っ..." />

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

    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 <ルール名>)
     ルール名で指定されるルールを表示する

    © 2018 Iluminado. All Rights Reserved. Designed By Web-Komp

    Please publish modules in offcanvas position.