【问题标题】:CLIPS simple percentage defruleCLIPS 简单百分比调整
【发布时间】:2013-05-23 20:41:16
【问题描述】:

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

(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))

【问题讨论】:

    标签: expert-system clips


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-01
        • 2012-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-13
        相关资源
        最近更新 更多