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

CLIPS编写的输血安全校验代码运行无输出问题求助

CLIPS血型判断程序问题修复方案

核心问题原因

  • 规则未关联患者血型与可接受血型库
    现有check-acceptance规则仅获取了患者血型变量?patient,但没有将该变量和blood模板的bt字段绑定,导致规则会无差别匹配所有预定义的血型条目,逻辑完全不符合设计需求。你后续修改的if else版本同样存在该问题,因此依旧无输出。
  • O型血符号定义与输入习惯冲突
    你代码中O型血使用数字0定义,如果输入时输入大众习惯的字母O会无法匹配,导致规则触发失败。
  • 缺少不兼容场景的输出规则
    现有代码仅定义了输血安全场景的触发逻辑,没有兼容失败的输出规则,因此不符合安全条件的血型组合不会有任何提示。
  • 缺少预定义事实加载步骤
    CLIPS运行时需要先执行(reset)命令加载deffacts中定义的血型规则库,再执行(run)触发规则,否则预定义的blood事实不会被加载,规则自然无法匹配。

修正后完整代码

(deftemplate blood
    (slot bt)
    (multislot acc))
(deffacts acceptance
    ; 此处bt为患者血型,acc为该患者可接受的供者血型列表
    (blood (bt O) (acc O))
    (blood (bt A) (acc O A))
    (blood (bt B) (acc O B))
    (blood (bt AB) (acc O A B AB)))
(defrule reading-input
=>
    (printout  t "请输入患者血型(O/A/B/AB):")
    (assert (patient (read)))
    (printout  t "请输入供者血型(O/A/B/AB):")
    (assert (donor (read))))
(defrule check-safe
    (patient ?patient)
    (donor ?donor)
    ; 直接绑定患者血型到blood模板的bt字段,同时判断供者在可接受列表内
    (blood (bt ?patient) (acc $? ?donor $?))
    =>
    (printout t "输血安全" crlf))
(defrule check-unsafe
    (patient ?patient)
    (donor ?donor)
    (blood (bt ?patient) (acc $?acc))
    (test (not (member$ ?donor ?acc)))
    =>
    (printout t "输血不安全" crlf))
; 加载预定义事实并运行
(reset)
(run)

补充说明

CLIPS是基于产生式规则的专家系统开发工具,属于早期人工智能领域的经典工具,非常适合规则明确的逻辑推理类场景,因此会在人工智能相关的教学项目中使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:15:03