Lispy Days

趣味で Lisp な日々 (index) (weblog) (view) (edit) (help)

LISA - 知的エージェントプラットフォーム

http://lisa.sourceforge.net/ で開発されている Lisp ベースの知的エージェント開発プラットフォーム. CLOS ベースのプロダクションシステムの実装.コアとして高速に多対多のマッチングを行う Rete アルゴリズムを 推論エンジンに採用している.LispWorks, Allegro Common Lisp, LispWorks, CLISP で動作する.

サンプル

燃料を満タンまで入れるプログラム.(ちょっとオーバーする場合あり)

(defpackage :jp.lispydays.lisa.sample (:use :lisa-lisp) (:nicknames :sample ))
(in-package :jp.lispydays.lisa.sample)

(clear)
(make-inference-engine)

(deftemplate vehicle ()
  (slot fuel))

(defrule vechicle-fuel ()
  (vehicle (fuel ?fuel))
  (test (>= ?fuel 100))
  =>
  (format t "~&Fuel: Full"))

(defrule charge-fuel ()
  (?vehicle (vehicle (fuel ?fuel)))
  (test (< ?fuel 100))
  =>
  (let ((d (random 10)))
    (format t "~&charge: fuel ~A to ~A" ?fuel (+ ?fuel d))
    (modify ?vehicle (fuel (+ ?fuel d)))))

(deffacts startup ()
  (vehicle (fuel 30)))

(defun fuel-to-max ()
  (reset)
  (run))
CL-USER> (sample::fuel-to-max)
charge: fuel 30 to 38
charge: fuel 38 to 46
charge: fuel 46 to 51
charge: fuel 51 to 55
charge: fuel 55 to 60
charge: fuel 60 to 61
charge: fuel 61 to 63
charge: fuel 63 to 70
charge: fuel 70 to 71
charge: fuel 71 to 72
charge: fuel 72 to 81
charge: fuel 81 to 84
charge: fuel 84 to 84
charge: fuel 84 to 88
charge: fuel 88 to 90
charge: fuel 90 to 95
charge: fuel 95 to 104
Fuel: Full