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

如何在CLIPS中将多组patient_symptoms合并为单个illness_matching实例

解决CLIPS中合并多个症状事实为单个模板实例的问题

你的原始规则会为每个patient_symptoms事实单独触发一次,因为它匹配的是单个症状事实,所以生成了三个独立的illness_matching实例。要将所有症状合并到一个实例中,需要先收集所有症状值,再一次性断言模板事实。

正确的实现规则

使用do-for-all-facts遍历所有patient_symptoms事实,收集所有症状到一个列表中,再断言单个illness_matching实例:

(defrule convert_to_template
    =>
    (bind ?symptom-list (create$))
    ; 遍历所有patient_symptoms事实,收集症状
    (do-for-all-facts ((?fact patient_symptoms)) TRUE
        (bind ?symptom-list (create$ ?symptom-list ?fact:1))
    )
    ; 断言包含所有症状的模板实例
    (assert (illness_matching (symptom_names ?symptom-list)))
)

说明

  • create$用于创建空列表,后续逐步添加每个症状。
  • ?fact:1表示取patient_symptoms事实的第一个(也是唯一一个)槽值。如果你为patient_symptoms定义了显式模板(比如包含名为symptom的槽),可以替换为?fact:symptom以提高可读性。
  • 此规则只会触发一次,将所有收集到的症状合并到单个illness_matching实例中。

预期结果

执行后会生成你期望的事实:

(illness_matching (symptom_names headache temperature cough))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:35:24