【问题标题】:Clips defRule defined successfully but does not fire with other defrulesClips defRule 定义成功,但不与其他 defrules 一起触发
【发布时间】:2021-05-22 19:35:44
【问题描述】:
这是我的代码,第一个 Defrule 会触发“get-patientnationalic”,但第二个称为“fever”不会
我正在尝试制作一个剪辑程序来测试用户的症状并诊断他们的疾病(如果有的话)
这是一个 uni 项目,我有一个截止日期,但我无法运行这个位
(deftemplate patient
(slot name)
(slot fever))
(defrule get-patientnationalic
=>
(printout t "What is your national-IC? " crlf)
(bind ?nationalic (readline))
(assert (patients's-nationalic ?nationalic)))
(defrule get-patientgender
=>
(printout t "What is your gender?" crlf)
(bind ?gender (readline))
(assert (patient's-gender ?gender)))
(defrule fever
(or (fever ?n)
(fever ?n))
?patient <- (patient (name ?name))
=>
(printout t crlf "Does "?name" has fever? (yes/no)" crlf)
(printout t " Answer: ")
(bind ?fever (lowcase (readline)))
(if (eq ?fever yes)
then
(bind ?fever y)
else
(if (eq ?fever no)
then
(bind ?fever n)))
(assert (fever ?fever))
(modify ?patient (fever ?fever)))
【问题讨论】:
标签:
computer-science
clips
【解决方案1】:
您的发烧规则的条件无法匹配,因为不存在患者事实,并且该规则要求的发烧事实仅由同一规则断言。只需相应地修改您的代码:
CLIPS (6.4 2/9/21)
CLIPS>
(deftemplate patient
(slot name)
(slot gender (default unknown))
(slot fever (default unknown))
(slot IC (default unknown)))
CLIPS>
(defrule get-patient-name
=>
(printout t "What is your name? ")
(bind ?name (readline))
(assert (patient (name ?name))))
CLIPS>
(defrule get-patient-nationalic
?patient <- (patient (IC unknown))
=>
(printout t "What is your national-IC? ")
(bind ?nationalic (readline))
(modify ?patient (IC ?nationalic)))
CLIPS>
(defrule get-patient-gender
?patient <- (patient (gender unknown))
=>
(printout t "What is your gender? ")
(bind ?gender (readline))
(modify ?patient (gender ?gender)))
CLIPS>
(defrule fever
?patient <- (patient (name ?name) (fever unknown))
=>
(printout t "Does " ?name " has fever? (yes/no) ")
(bind ?fever (lowcase (readline)))
(if (eq ?fever yes)
then
(bind ?fever y)
else
(if (eq ?fever no)
then
(bind ?fever n)))
(modify ?patient (fever ?fever)))
CLIPS> (reset)
CLIPS> (run)
What is your name? Fred
What is your national-IC? US
What is your gender? male
Does Fred has fever? (yes/no) yes
CLIPS> (facts)
f-1 (patient (name "Fred") (gender "male") (fever "yes") (IC "US"))
For a total of 1 fact.
CLIPS>