ルールエンジンとしてジェスを使用すると、ある目撃者が、ある場所で、関連する時間とともに人を見たという事実を主張することができます。
(deffacts witnesses
(witness Batman Gotham 18)
(witness Hulk NYC 19)
(witness Batman Gotham 2)
(witness Superman Chicago 22)
(witness Batman Gotham 10)
)
原則として、時間を考慮せずに、複数の目撃者が同じ場所で同じ人物を見たことがあるかどうかを知りたい。
Jessのドキュメントでは、10万以上の給与を稼ぐ従業員を数えるための次の例を取得しました。
(defrule count-highly-paid-employees
?c <- (accumulate (bind ?count 0) ;; initializer
(bind ?count (+ ?count 1)) ;; action
?count ;; result
(employee (salary ?s&:(> ?s 100000)))) ;; CE
=>
(printout t ?c " employees make more than $100000/year." crlf))
したがって、前の例に基づいてコードを作成しました。
(defrule count-witnesses
(is-lost ?plost)
(witness ?pseen ?place ?time)
?c <- (accumulate (bind ?count 0)
(bind ?count (+ ?count 1))
?count
(test ()) ; conditional element of accumulate
(test (= ?plost ?pseen))
(test (>= ?count 3))
=>
(assert (place-seen ?place))
)
上記の「(deffacts)」命令とルールを使用して、エンジンはファクトをアサートする必要があります
(place-seen Gotham)
バットマンがゴッサムで3回見たからです。
'accumulate'の条件要素(CE)部分の使用方法がわかりません。「テスト」を使用して、同じ人物と場所の事実を保持できますか?
これを達成する方法はありますか?
ありがとうございました!
注:「accumulate」のsynthaxは
(accumulate <initializer> <action> <result> <conditional element>)