2014-09-20 30 views
0

首先模板實例,我宣佈:CLIPS計數的事實或匹配的模式

(自定義模板工人 (插槽ID (類型STRING) (默認DERIVE))

(插槽工資 (float型) (?默認DERIVE)))

然後我補充一下:

(斷言(工人(ID 「A」)(工資30.0)))

(斷言(工人(ID 「B」)(工資40.0)))

(斷言(工人(ID 「C」)(工資60.0)))

(斷言(工人(ID 「d」)(工資70.0)))

(斷言(工人(ID的 「e」)(工資10.0)))

我該如何計算有多少工作rs'我有嗎?

我怎樣才能算出有多少工人的工資超過30?

回答

2

用事實設定的查詢功能:

CLIPS> 
(deftemplate worker 
    (slot id (type STRING) (default ?DERIVE)) 
    (slot salary (type FLOAT) (default ?DERIVE))) 
CLIPS> (assert (worker (id "a") (salary 30.0))) 
<Fact-1> 
CLIPS> (assert (worker (id "b") (salary 40.0))) 
<Fact-2> 
CLIPS> (assert (worker (id "c") (salary 60.0))) 
<Fact-3> 
CLIPS> (assert (worker (id "d") (salary 70.0))) 
<Fact-4> 
CLIPS> (assert (worker (id "e") (salary 10.0))) 
<Fact-5> 
CLIPS> (find-all-facts ((?f worker)) (> ?f:salary 30.0)) 
(<Fact-2> <Fact-3> <Fact-4>) 
CLIPS> (length$ (find-all-facts ((?f worker)) (> ?f:salary 30.0))) 
3 
CLIPS> (do-for-all-facts ((?f worker)) (> ?f:salary 30.0) (printout t ?f:id crlf)) 
b 
c 
d 
CLIPS>