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

如何统计CLIPS事实列表中指定值的出现次数

统计CLIPS事实中"Bob"的出现次数解决方案

CLIPS没有直接提供统计列表元素出现次数的内置函数,你可以通过规则结合现有函数来实现需求,具体代码如下:

步骤1:初始化计数事实

定义一个事实来存储Bob的总出现次数,初始值为0:

(deffacts count
    (bob-count 0)
)

步骤2:编写计数规则

遍历每个班级事实,筛选出其中的Bob并统计数量,更新总计数:

(defrule count-bob-in-class
    ?class-fact <- (class ?class-name $?students)
    ?count-fact <- (bob-count ?current-total)
    (test (member$ Bob ?students)) ; 仅处理包含Bob的班级
=>
    ; 筛选当前班级中所有Bob并统计数量
    (bind ?current-class-count (length$ (subset$ ?students (lambda (?s) (eq ?s Bob)))))
    ; 更新总计数
    (modify ?count-fact (bob-count (+ ?current-total ?current-class-count)))
    ; 删除已处理的班级事实,避免重复触发规则
    (retract ?class-fact)
)

步骤3:编写结果输出规则

当所有班级事实处理完成后,输出最终统计结果:

(defrule output-result
    (bob-count ?total)
    (not (class ? ?)) ; 确认无未处理的班级事实
=>
    (printout t "Bob的出现次数: " ?total crlf)
)

运行验证

执行以下命令运行规则:

(reset)
(run)

执行后会输出:Bob的出现次数: 4,符合预期结果。

内容的提问来源于stack exchange,提问作者heda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:02:07