最后,当程序打印百分比确定性时,程序挂起。可能有什么问题?它必须是计算百分比规则,因为删除后,将打印非百分比数据。
(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))
答案 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))))