You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

给定CLIPS事实与模板,如何用规则中assert命令填充multislot

CLIPS规则实现:生成指定tree事实

问题描述

现有CLIPS的事实集合定义:

(deffacts Liste-MST
(mst (arc 1 2))
(mst (arc 2 3))
(mst (arc 2 5))
(mst (arc 1 4)))

同时定义了模板:

(deftemplate tree 
   (multislot arc))

需要编写CLIPS规则,通过assert命令生成目标事实:

(tree (arc 1 2)(arc 2 3)(arc 2 4)(arc 2 5)(arc 1 4))

解决方案

方式一:灵活收集现有arc并补充新增项

这种方式会自动收集所有mst事实中的arc槽值,再补充目标中需要的(arc 2 4),适合后续mst事实可能变动的场景:

(defrule build-target-tree
    ;; 收集所有mst事实的arc内容
    (collect ?all-arcs <- (mst (arc $?)))
    =>
    ;; 合并收集到的arc与新增的(arc 2 4),断言生成tree事实
    (assert (tree (arc $?all-arcs) (arc 2 4)))
)

方式二:固定匹配现有事实并直接断言

如果mst事实固定不变,也可以直接匹配所有现有mst事实,然后在断言时写出所有需要的arc项:

(defrule build-target-tree
    (mst (arc 1 2))
    (mst (arc 2 3))
    (mst (arc 2 5))
    (mst (arc 1 4))
    =>
    (assert (tree (arc 1 2) (arc 2 3) (arc 2 4) (arc 2 5) (arc 1 4)))
)

内容的提问来源于stack exchange,提问作者Honoré De Marseille

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 00:33:15