如何在CLIPS中检查事实存在且不触发错误?
解决CLIPS中仅当指定事实存在时输出内容的问题
方法1:使用exists函数替代find-fact
你可以用exists函数检查事实是否存在,该函数在匹配不到对应事实时会返回FALSE,不会触发错误,完全符合你的需求。修改后的代码如下:
(if (exists (person ?name)) then (printout t "The person is \"" ?name "\"" crlf) )
这段代码会在person事实存在时,输出包含对应名称的内容;若没有person事实,不会执行任何输出,也不会报错。
方法2:使用CLIPS规则(更贴合CLIPS设计范式)
CLIPS是基于规则的专家系统,用规则处理事实存在的场景更自然,也不会出现错误。示例规则如下:
(defrule check-person-fact (person ?name) => (printout t "The person is \"" ?name "\"" crlf) )
当你断言(person "Jack")后,该规则会自动触发并输出内容;若没有person事实,规则不会触发,也就不会产生任何输出或错误。
内容的提问来源于stack exchange,提问作者user3543227
相关产品推荐
相关产品推荐

