On 5/25/07, fan yang <[EMAIL PROTECTED]> wrote:
I want to get how many methods in each class, is there a Jess function
which does what I want?
If there isn't such function, would you please tell me how to do it?

Hi Fan,

Not a function, but a conditional element (CE) is what you want I think.
Try this:

(defrule a-class-has-more-than-10-methods
   "For each class fact, count the methods and alert if count > 10"
   (class (className ?cn1))
   ?c <- (accumulate (bind ?count 0)
       (bind ?count (+ ?count 1))
       ?count
       (method (className ?cn1)))
   (test (> ?c 10))
   =>
   (printout t ?cn1 " has more than 10 methods" crlf))
A complete program is pasted below.
I hope this helps!

Cheers,
Jason
-----------------------------------------------------------
Jason C. Morris
Worcester Polytechnic Institute     Phone: (508) 831-5006
Department of Computer Science      FAX:   (508) 831-5776
Fuller Laboratories - Room 312      [EMAIL PROTECTED]
Artificial Intelligence Lab (AIRG)
100 Institute Road
Worcester, MA 01609-2280
-----------------------------------------------------------


; countMethods.clp

(clear)
(watch all)

(deftemplate class (slot className))
(deftemplate method (slot className)(slot methodName))

(deffacts test-facts
   (class (className ClassA))
   (class (className ClassB))
   (class (className ClassC))
   (method (className ClassA)(methodName method-1))
   (method (className ClassA)(methodName method-2))
   (method (className ClassA)(methodName method-3))
   (method (className ClassA)(methodName method-4))
   (method (className ClassA)(methodName method-5))
   (method (className ClassA)(methodName method-6))
   (method (className ClassA)(methodName method-7))
   (method (className ClassA)(methodName method-8))
   (method (className ClassA)(methodName method-9))
   (method (className ClassA)(methodName method-10))
   (method (className ClassA)(methodName method-11))
   (method (className ClassA)(methodName method-12))
   (method (className ClassA)(methodName method-13))
   (method (className ClassA)(methodName method-14))
   (method (className ClassA)(methodName method-15))
   (method (className ClassB)(methodName method-1))
   (method (className ClassB)(methodName method-2))
   (method (className ClassB)(methodName method-3))
   (method (className ClassB)(methodName method-4))
   (method (className ClassB)(methodName method-5))
   (method (className ClassB)(methodName method-6))
   (method (className ClassB)(methodName method-7))
   (method (className ClassB)(methodName method-8))
   (method (className ClassB)(methodName method-9))
   (method (className ClassB)(methodName method-10))
   (method (className ClassB)(methodName method-11))
   (method (className ClassB)(methodName method-12))
   (method (className ClassC)(methodName method-1))
   (method (className ClassC)(methodName method-2))
   )

(defrule a-class-has-more-than-10-methods
   "For each class fact, count the methods and alert if count > 10"
   (class (className ?cn1))
   ?c <- (accumulate (bind ?count 0)
       (bind ?count (+ ?count 1))
       ?count
       (method (className ?cn1)))
   (test (> ?c 10))
   =>
   (printout t ?cn1 " has more than 10 methods" crlf))

;; Program
(reset)
(run)

;; OUTPUT
;Jess, the Rule Engine for the Java Platform
;Copyright (C) 2006 Sandia Corporation
;Jess Version 7.0p1 12/21/2006
;
;MAIN::a-class-has-more-than-10-methods: +1+1+1+2+2+t
; ==> Focus MAIN
; ==> f-0 (MAIN::initial-fact)
; ==> f-1 (MAIN::class (className ClassA))
; ==> f-2 (MAIN::class (className ClassB))
; ==> f-3 (MAIN::class (className ClassC))
; ==> f-4 (MAIN::method (className ClassA) (methodName method-1))
; ==> f-5 (MAIN::method (className ClassA) (methodName method-2))
; ==> f-6 (MAIN::method (className ClassA) (methodName method-3))
; ==> f-7 (MAIN::method (className ClassA) (methodName method-4))
; ==> f-8 (MAIN::method (className ClassA) (methodName method-5))
; ==> f-9 (MAIN::method (className ClassA) (methodName method-6))
; ==> f-10 (MAIN::method (className ClassA) (methodName method-7))
; ==> f-11 (MAIN::method (className ClassA) (methodName method-8))
; ==> f-12 (MAIN::method (className ClassA) (methodName method-9))
; ==> f-13 (MAIN::method (className ClassA) (methodName method-10))
; ==> f-14 (MAIN::method (className ClassA) (methodName method-11))
;==> Activation: MAIN::a-class-has-more-than-10-methods :  f-1,,
; ==> f-15 (MAIN::method (className ClassA) (methodName method-12))
;<== Activation: MAIN::a-class-has-more-than-10-methods :  f-1,,
;==> Activation: MAIN::a-class-has-more-than-10-methods :  f-1,,
; ==> f-16 (MAIN::method (className ClassA) (methodName method-13))
;<== Activation: MAIN::a-class-has-more-than-10-methods :  f-1,,
;==> Activation: MAIN::a-class-has-more-than-10-methods :  f-1,,
; ==> f-17 (MAIN::method (className ClassA) (methodName method-14))
;<== Activation: MAIN::a-class-has-more-than-10-methods :  f-1,,
;==> Activation: MAIN::a-class-has-more-than-10-methods :  f-1,,
; ==> f-18 (MAIN::method (className ClassA) (methodName method-15))
;<== Activation: MAIN::a-class-has-more-than-10-methods :  f-1,,
;==> Activation: MAIN::a-class-has-more-than-10-methods :  f-1,,
; ==> f-19 (MAIN::method (className ClassB) (methodName method-1))
; ==> f-20 (MAIN::method (className ClassB) (methodName method-2))
; ==> f-21 (MAIN::method (className ClassB) (methodName method-3))
; ==> f-22 (MAIN::method (className ClassB) (methodName method-4))
; ==> f-23 (MAIN::method (className ClassB) (methodName method-5))
; ==> f-24 (MAIN::method (className ClassB) (methodName method-6))
; ==> f-25 (MAIN::method (className ClassB) (methodName method-7))
; ==> f-26 (MAIN::method (className ClassB) (methodName method-8))
; ==> f-27 (MAIN::method (className ClassB) (methodName method-9))
; ==> f-28 (MAIN::method (className ClassB) (methodName method-10))
; ==> f-29 (MAIN::method (className ClassB) (methodName method-11))
;==> Activation: MAIN::a-class-has-more-than-10-methods :  f-2,,
; ==> f-30 (MAIN::method (className ClassB) (methodName method-12))
;<== Activation: MAIN::a-class-has-more-than-10-methods :  f-2,,
;==> Activation: MAIN::a-class-has-more-than-10-methods :  f-2,,
; ==> f-31 (MAIN::method (className ClassC) (methodName method-1))
; ==> f-32 (MAIN::method (className ClassC) (methodName method-2))
;FIRE 1 MAIN::a-class-has-more-than-10-methods f-2, f--2,
;ClassB has more than 10 methods
;FIRE 2 MAIN::a-class-has-more-than-10-methods f-1, f--2,
;ClassA has more than 10 methods
; <== Focus MAIN




On 5/25/07, fan yang <[EMAIL PROTECTED]> wrote:
Hi All,

Assuming there are two facts, one is a class and another one is a method,
definitions of two facts are:

(deftemplate class (slot className))

(deftemplate method (slot className)(slot methodName))

(defrule a-class-has-more-than-10-methods
  (class (className ?clsName))
  ; (method (className ?clsName)(methodName ?mtdName)
  ; I want to get the number of methods in this class
  =>
 (printout t ?clsName " has more than 10 methods" crlf)
)

I want to get how many methods in each class, is there a Jess function
which does what I want? If there isn't such function, would you please tell
me how to do it?

Thanks a lot.






--

Reply via email to