上个月打算,用 CLIPS 改写 生态模拟

单个体,年龄加一

从最基本的开始 1.clp:

(deftemplate 某种
   (slot 年龄))

(defrule 开始
   =>
   (println "开天辟地")
   (assert (某种 (年龄 0))))

(defrule 时间流逝
  ?个体 <- (某种 (年龄 ?年龄))
  =>
  (modify ?个体 (年龄 (+ ?年龄 1)))
  (halt))

load.bat:

(unwatch all)
(clear)
(load 2.clp)
(reset)

运行效果:

CLIPS> (batch* load.bat)
%**
TRUE
CLIPS> (run)
开天辟地
CLIPS> (facts)
f-1     (某种 (年龄 1))
For a total of 1 fact.

单个体永生

将 1.clp 去掉 (halt) 后,估计就能自行递增了。

运行后,输出「开天辟地」后未显示提示符,看起来是在无限循环了。

打开 Debug -> Fact Browser,可以看到该个体的年龄在不断递增,挺方便:

CPU 占用 100%。IDE 右上角的 Pause 按下后,递增即暂停,放开 Pause 继续。

完全停止运行 Environment 可 Halt Execution。