2014-09-20 2 views
0

Первый Заявляю:КЛИПЫ подсчета фактов или экземпляры шаблонов, которые соответствуют шаблону

(deftemplate работник (идентификатор слота (строковый тип) (по умолчанию DERIVE))

(слот зарплату (тип FLOAT) (? по умолчанию DERIVE)))

затем добавить:

(утверждает (рабочий (идентификатор "а") (зарплата 30,0)))

(утверждает (рабочий (идентификатор "б") (заработная плата 40,0)))

(утверждает (рабочий (идентификатор "с") (заработной платой 60,0)))

(утверждает (рабочая (идентификатор "d") (заработная плата 70,0)))

(утверждает (рабочая (идентификатор "е") (зарплата 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> 
Смежные вопросы