0

ファクトのファクトアドレスを使用して、クリップでマルチスロットスロットのすべての値を取得することは何とか可能ですか? 例えば:

(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 は、ファクト アドレス ?f を使用して、coraxinfo スロット内のすべての値を取得すると想定していましたが、そうではないようです。全然無理ですか?

4

1 に答える 1