RE: JESS: Find the minimum

2011-08-26 Thread Cathy Bob Crothers
 

Yes, this works! This meets my requirements.

 

Thank you Wolfgang.

 

This is similar to my first effort, which never fires. Can you explain the
difference between the two rules.

 

My first effort

 

(defrule find-lines-per-block-ssn

   ?word1 - (word (page ?page) (rowNumber ?rowNumber1) (type ssn)
(text ?text1)  )

?word2 - (word (page ?page) (rowNumber ?rowNumber2:(
?rowNumber1 ?rowNumber2)) (type ssn) (text ?text2) )

(not 

(word (page ?page) (rowNumber ?rowNumberVar:( (abs (-
?rowNumberVar ?rowNumber1) ) (abs (- ?rowNumber2 ?rowNumber1) ) ) ) )

)

=

; do something

) 

 

Thanks to everyone who responded. This was my first message to the forum.
Thanks for all the quick and helpful responses.

 

Bob

 

From: owner-jess-us...@sandia.gov [mailto:owner-jess-us...@sandia.gov] On
Behalf Of Wolfgang Laun
Sent: Wednesday, August 24, 2011 10:27 AM
To: jess-users@sandia.gov
Subject: Re: JESS: Find the minimum

 

Not sure whether this meets all the possibly undisclosed requirements, not
sure about the relation of row numbers and words, but this is firing one,
even when there is words from more than one page:

(defrule find-lines-per-block-ssn
  ?w1 - (word (page ?page)
   (rowNumber ?rowNumber1)
   (type ssn)
   (text ?text1))
  ?w2 - (word (page ?page)
   (rowNumber ?rowNumber2 :( ?rowNumber1 ?rowNumber2))
   (type ssn)
   (text ?text2))
  (not (and (word (page ?px)
  (rowNumber ?rn1)
  (type ssn))
(word (page ?px)
  (rowNumber ?rn2 :( ?rn1 ?rn2))
  (type ssn))
(test ( (- ?rn2 ?rn1) (- ?rowNumber2 ?rowNumber1)
=
  (printout t (fact-slot-value ?w1 text)  -  (fact-slot-value ?w2 text)
crlf)
) 

-W



Re: JESS: Find the minimum

2011-08-24 Thread Wolfgang Laun
Not sure whether this meets all the possibly undisclosed requirements, not
sure about the relation of row numbers and words, but this is firing one,
even when there is words from more than one page:

(defrule find-lines-per-block-ssn
  ?w1 - (word (page ?page)
   (rowNumber ?rowNumber1)
   (type ssn)
   (text ?text1))
  ?w2 - (word (page ?page)
   (rowNumber ?rowNumber2 :( ?rowNumber1 ?rowNumber2))
   (type ssn)
   (text ?text2))
  (not (and (word (page ?px)
  (rowNumber ?rn1)
  (type ssn))
(word (page ?px)
  (rowNumber ?rn2 :( ?rn1 ?rn2))
  (type ssn))
(test ( (- ?rn2 ?rn1) (- ?rowNumber2 ?rowNumber1)
=
  (printout t (fact-slot-value ?w1 text)  -  (fact-slot-value ?w2 text)
crlf)
)

-W


Re: JESS: Find the minimum

2011-08-23 Thread Wolfgang Laun
What makes one word different from another one? Surely *you* know (but
*we*don't), and this must be a constraint in that rule.

If it is the rowNumber, than this condition would be logically correct:
   (rowNumber ?rowNumber2 :( ?rowNumber1 ?rowNumber2))
although it were better written as
   (rowNumber ?rowNumber2  ~?rowNumber1)
If it isn't, omit this constraint.

-W


On 23 August 2011 06:17, Cathy  Bob Crothers crothers4...@comcast.netwrote:

 I would like find ?word1 and ?word2 such that the absolute value of
 ?rowNumber1 minus?rowNumber2 is the minimum number and ?word1 is not equal
 to ?word2

 ** **

 rowNumber are integers, 1, 2, 3

 ** **

 I have verified that there is a single minimum.

 ** **

 I have tried 

 ** **

 (defrule find-lines-per-block-ssn

?word1 - (word (page ?page) (rowNumber ?rowNumber1) (type ssn)
 (text ?text1)  )

 ?word2 - (word (page ?page) (rowNumber ?rowNumber2:(
 ?rowNumber1 ?rowNumber2)) (type ssn) (text ?text2) )

 (not 

 (word (page ?page) (rowNumber ?rowNumberVar:( (abs (-
 ?rowNumberVar ?rowNumber1) ) (abs (- ?rowNumber2 ?rowNumber1) ) ) ) )

 )

 =

 ; do something

 ) 

 ** **

 This rule never fired.

 ** **

 ** **

 ** **

 I tried  

 (defrule find-lines-per-block-ssn

?word1 - (word (page ?page) (rowNumber ?rowNumber1) (type ssn)
 (text ?text1)  )

 ?word2 - (word (page ?page) (rowNumber ?rowNumber2) (type ssn)
 (text ?text2) )

 (not 

 (word (page ?page) (rowNumber ?rowNumberVar:( (abs (-
 ?rowNumberVar ?rowNumber1) ) (abs (- ?rowNumber2 ?rowNumber1) ) ) ) )

 )

 =

 ; do someting

 )  

 ** **

 This fired but ?word1 equals ?word2.

 ** **

 Thanks

 ** **

 Bob

 ** **

 ** **