0
私はCLIPSを初めて使用しており、バックトラッキングのパラダイムが頭を痛めます。CLIPSでif-then-elseを排除してコードを最適化する方法
私は次の出力を生成する必要があるという質問があります。
必要に応じて、動作させるためにいくつかのルールを定義しました。
(defrule rule_1
(THE-PATIENT-HAS-A-SORE-THROAT)
(WE-SUSPECT-A-BACTERIAL-INFECTION) =>
(assert(WE-BELIEVE-THE-PATIENT-HAS-STREP-THROAT))
(printout t "We believe the patient has strep throat" crlf))
(defrule rule_2
(THE-PATIENT-TEMPERATURE-IS-40C) =>
(assert(THE-PATIENT-HAS-A-FEVER)))
(defrule rule_3
(THE-PATIENT-HAS-BEEN-SICK-OVER-A-MONTH)
(THE-PATIENT-HAS-A-FEVER) =>
(assert(WE-SUSPECT-A-BACTERIAL-INFECTION)))
(defrule ask-sick
(start-question) =>
(printout t "Q: Is the patient's temperature more than 39? [yes/no]: ")
(bind ?input (readline))
(if (neq ?input "no")
then
(assert (THE-PATIENT-TEMPERATURE-IS-40C))
(printout t "The patient has fever" crlf)
(printout t "Q: Does the patient sick over a month? [yes/no]: ")
(bind ?input2 (readline))
(if (neq ?input2 "no")
then
(assert (THE-PATIENT-HAS-BEEN-SICK-OVER-A-MONTH))
(printout t "We suspect the patient has bacterial infection" crlf)
(printout t "Q: How about sore throat? [yes/no]: ")
(bind ?input3 (readline))
(if (neq ?input3 "no")
then
(assert (THE-PATIENT-HAS-A-SORE-THROAT))
)
)
)
)
(deffacts start
(start-question)
)
最終的に私はプログラムを生き生きとさせました。
問題は、質問のルールで、if-then-elseの束を組み込んで、バックトラッキングのパラダイムにあまり適合しないプログラムが動作するようにする必要がありました。
誰かが、それは、ルール1続行する場所を知っているのように私はそれを最適化する方法を教えてもらえます - など>ルール2 /ルール3を、
うわー!それは本当に独創的です!ありがとう! –