繁体   English   中英

我的 CLIPS 代码有什么不好的 - 或/和变化或 else-if 语法?

[英]What is bad in my CLIPS code - or/and varying or else-if grammatic?

这是我将与 Java 代码连接的 CLIPS 代码。 当我试图在 WinCLIPS 中加载时,它被写为 FALSE。

我认为问题可能出在 or/and 或 if-else 语法上。

(deftemplate diagnoza
(slot wiek)
(slot klasa)
)

(deftemplate result
(slot value)
)

(defrule wiek-klasa-rule 
 (diagnoza (wiek ?w))
 (diagnoza (klasa ?g))
 =>
(if (and (< ?w 19)(> ?g 4))) 
    then
    (bind ?x "Wiek szkolny - ok.")
    (printout t ?x crlf)
    (assert (result (value ?x)))

(if (< ?w 4)) 
    then
    (bind ?x "Wiek poniżej 4 lat. Nie można zdiagnozować.")
    (printout t ?x crlf)
    (assert (result (value ?x)))

(if (> ?w 19)) 
    then
    (bind ?x "Wiek powyżej 19 lat. Nie można zdiagnozować.")
    (printout t ?x crlf)
    (assert (result (value ?x)))

else 
    (bind ?w "Nieprawidłowa wartość wieku. Nie można zdiagnozować.")
    (printout t ?x crlf) 
    (assert (result (value ?x)))
)
)

你的括号不平衡。 如果你缩进你的代码以反映嵌套的深度,你可以看到你在哪里犯了错误:

(defrule wiek-klasa-rule 
   (diagnoza (wiek ?w))
   (diagnoza (klasa ?g))
 =>
   (if (and (< ?w 19)
            (> ?g 4)
       )
   ) 
   then
   (bind ?x "Wiek szkolny - ok.")
   (printout t ?x crlf)
   (assert (result (value ?x)
           )
   )
   (if (< ?w 4)
   ) 
   then
   (bind ?x "Wiek poniżej 4 lat. Nie można zdiagnozować.")
   (printout t ?x crlf)
   (assert (result (value ?x)
           )
   )
   (if (> ?w 19)
   ) 
   then
   (bind ?x "Wiek powyżej 19 lat. Nie można zdiagnozować.")
   (printout t ?x crlf)
   (assert (result (value ?x)))
   else 
   (bind ?w "Nieprawidłowa wartość wieku. Nie można zdiagnozować.")
   (printout t ?x crlf) 
   (assert (result (value ?x)))
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM