我在尝试制作一个程序,询问申请人是否无家可归、失业、无存款等,并获得一级或二级福利支持作为答案,但我在 Clips 中无法加载这个程序。我收到了下面的错误信息
代码
(defrule Claimant(Claimant-is homeless)(Claimant-is unemployed)(Claimant-is nosavings)(Claimant-is dependants)(Claimant-is disabled))(deftemplate Benefit (slot benefit))(defrule Level1 Claimant(homesless yes) (unemployed yes) (nosavings no) (dependants yes) (disabled yes)) => (assert (Benefit (benefit level1))) (printout t "You get level 1 benefit support" crlf))(defrule Level2 Claimant(homesless yes) (unemployed yes) (nosavings no) (dependants no) (disabled no)) => (assert (Benefit (benefit level2))) (printout t "You get level 2 benefit support" crlf))
错误
Defining defrule: Claimant [PRNTUTIL2] Syntax Error: Check appropriate syntax for defrule.ERROR:(defrule MAIN::Claimant (Claimant-is homeless) (Claimant-is unemployed) (Claimant-is nosavings) (Claimant-is dependants) (Claimant-is disabled) )Defining deftemplate: BenefitDefining defrule: Level1 [PRNTUTIL2] Syntax Error: Check appropriate syntax for defrule.ERROR:(defrule MAIN::Level1 ClaimantDefining defrule: Level2 [PRNTUTIL2] Syntax Error: Check appropriate syntax for defrule.ERROR:(defrule MAIN::Level2 ClaimantFALSECLIPS>
回答:
您的语法存在几个需要纠正的问题。
设计也可以简化(但我不会讨论这方面)。
以下展示了一个经过修正的等效版本。
homeless.clp
(deftemplate Claimant (slot homeless (type SYMBOL) (allowed-values yes no)) (slot unemployed (type SYMBOL) (allowed-values yes no)) (slot nosavings (type SYMBOL) (allowed-values yes no)) (slot dependants (type SYMBOL) (allowed-values yes no)) (slot disabled (type SYMBOL) (allowed-values yes no)))(deftemplate Benefit (slot benefit (type SYMBOL) (allowed-values level1 level2)))(defrule Level1 (Claimant (homeless yes) (unemployed yes) (nosavings no) (dependants yes) (disabled yes)) => (assert (Benefit (benefit level1))) (printout t "You get level 1 benefit support" crlf))(defrule Level2 (Claimant (homeless yes) (unemployed yes) (nosavings no) (dependants no) (disabled no)) => (assert (Benefit (benefit level2))) (printout t "You get level 2 benefit support" crlf))
现在您可以使用以下命令进行测试
(clear)(load "homeless.clp")(assert (Claimant (homeless yes) (unemployed yes) (nosavings no) (dependants no) (disabled no)))(run)
并得到
You get level 2 benefit support