【问题标题】:CLIPS - Adding the slots of two factsCLIPS - 添加两个事实的插槽
【发布时间】:2021-06-16 14:42:58
【问题描述】:

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

和运行程序的截图:

【问题讨论】:

    标签: add clips


    【解决方案1】:

    您需要在(运行)命令之前发出(重置)命令。重置会删除所有现有事实,然后断言您的 deffacts 中指定的事实。

    【讨论】:

    • 是的,谢谢,我几个小时前就知道了。再次感谢您的回复。我稍后也会发布完整的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2020-01-17
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    相关资源
    最近更新 更多