CLIPS简单百分比规则

时间:2013-05-23 20:41:16

标签: expert-system clips

最后,当程序打印百分比确定性时,程序挂起。可能有什么问题?它必须是计算百分比规则,因为删除后,将打印非百分比数据。

(defmodule PRINT-RESULTS (import MAIN ?ALL))

(defrule PRINT-RESULTS::calculate-percentages
?var <- (religion (name ?religion) (aspects $?aspects) (certainty ?certainty))
=>
(modify ?var (certainty =(*(/ ?certainty 700)100))))

(defrule PRINT-RESULTS::print-religion
?rel <- (religion (name ?religion) (aspects $?aspects) (certainty ?certainty))
=>
(retract ?rel)
(printout t crlf RELIGION:  "              "  
                ?religion crlf ASPECTS:   "              "  
                ?aspects crlf CERTAINTY:  "              "  
                ?certainty crlf))

2 个答案:

答案 0 :(得分:0)

看来你陷入了无限循环。当您修改deftemplate实例时,您将使用已修改的实例替换原始实例,在您的情况下,实例将一次又一次地匹配calculate-percentages。所以你需要防止这种无限循环的规则匹配。

由于您正在使用模块,请考虑在PRINT-RESULTS以外的模块中计算您的确定性(我将其他模块称为UPDATE-CERTAINTY)。然后在then规则的calculate-percentages部分中,您可以弹出UPDATE-CERTAINTY模块,以防止规则与修改后的事实匹配。

答案 1 :(得分:0)

或者,您可以在事实中使用额外的插槽来指示是否已对事实进行了计算(在此示例中为状态槽):

(defrule PRINT-RESULTS::calculate-percentages
?var <- (religion (name ?religion) (status ~final) (aspects $?aspects) (certainty ?certainty))
=>
(modify ?var (status final) (certainty =(*(/ ?certainty 700)100))))