【发布时间】:2021-06-16 14:42:58
【问题描述】:
我对 CLIPS 还很陌生,一直在尝试实现一个基于讲座的程序,该程序分别添加 2 个 slot 的值,两个事实。我首先定义o1、o2(我们添加的两个事实)和o3(我们存储结果的位置)的模板。前两个事实 o1 和 o2 中的每一个都有 2 个 slots , s1 和 s2 。 o3 的插槽是 r1 和 r2 。然后我继续使用 deffacts 初始化插槽 o1 和 o2 。然后,结束,使用 defrule ,我将变量设置为 o1 和 o2 的插槽,并使用 assert 生成 o3 事实,其中插槽 @987654338 @ 将具有事实 o1 和 o2 的第一个槽的值的总和,r2 将具有第二个的总和。我正在使用 ubuntu,使用 clips -f try.clp 命令加载 clp 剪辑文件,然后执行 (run) 和最后,(facts),但看不到新的事实,或者任何一个预先存在的事实。有人可以指导我吗?我正在发布我的代码和运行程序的屏幕截图。
这是我的代码:
(deftemplate o1
(slot s1)
(slot s2))
(deftemplate o2
(slot s1)
(slot s2))
(deftemplate o3
(slot r1)
(slot r2))
; Facts
(deffacts F
(o1 (s1 3)(s2 5))
(o2 (s1 7)(s2 9)))
; Rules
(defrule R
(o1 (s1 ?x1)(s2 ?y1))
(o2 (s1 ?x2)(s2 ?y2))
=>
(assert (o3(r1 (+ ?x1 ?x2))(r2 (+ ?y1 ?y2))))
)
和运行程序的截图:
【问题讨论】: