使用CLIPS中的事实地址获取多时隙插槽的所有值

时间:2014-05-20 16:21:57

标签: clips expert-system inference-engine

是否有可能在剪辑中使用事实的事实地址来获取多时隙插槽中的所有值?例如:

(deftemplate MAIN::simplecause
   (multislot coraxinfo (type INTEGER) (default 0))
   (multislot changeinfo (type SYMBOL) (default undefined)))

(deftemplate MAIN::finalcause   
   (multislot coraxinfo (type INTEGER) (default 0))
   (multislot changeinfo (type SYMBOL) (default undefined)))

(deftemplate MAIN::finalcausefinal  
   (multislot coraxinfo (type INTEGER) (default 0))
   (multislot changeinfo (type SYMBOL) (default undefined))
   (slot casecount (type INTEGER) (default 2)))

我有一个名为count-coraxes的函数,它在输入中接收多时隙值,所以我尝试编写这样的规则:

(defrule final_cause_reason_count
   ?f <- (finalcause (coraxinfo ?corax $?) (changeinfo ?change $?))
   (simplecause (coraxinfo $? ?corax $?) (changeinfo $? ?change $?))
   =>
   (assert (finalcausefinal(coraxinfo ?f:coraxinfo) (changeinfo ?f:changeinfo) (casecount (count-coraxes ?f:coraxinfo)))))

我认为?f:coraxinfo会将coraxinfo插槽中的所有值用于factadress?f但是看起来并非如此。它根本不可能吗?

1 个答案:

答案 0 :(得分:0)

Per Gary的评论:

检索槽值的简写语法只能在事实集查询函数中使用。使用&#34;(fact-slot-value?f changeinfo)&#34;而不是?f:changeinfo