CLIPS - 添加两个事实的插槽

CLIPS - Adding the slots of two facts

我是 CLIPS 的新手,一直在尝试实现一个基于讲座的程序,该程序分别添加两个事实的 2 个槽的值。我首先定义 o1o2 (我们添加的两个事实)和 o3 (我们存储结果的地方)的模板。前两个事实 o1o2 中的每一个都有 2 个 slotss1s2o3 的插槽是 r1r2 。然后我使用 deffacts 继续初始化插槽 o1o2 。然后,结束,使用 defrule ,我将变量设置为 o1o2 的插槽并使用 assert 生成o3 事实,哪个插槽 r1 将具有事实 o1o2 的第一个插槽值的总和,而 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))))
)

和 运行 程序的屏幕截图:

您需要在 (运行) 命令之前发出一个(重置)命令。 Reset 删除所有现有事实,然后声明您的 defacts 中指定的事实。