JESS: [EXTERNAL] How to negate a variable when in lhs of a rule

2012-01-11 Thread Hunter McMillen
Hi everyone,

I am trying to differentiate between Objects that belong to a certain user
inside two of my rules.

I have a variable created from Java like this:

*engine.getGlobalContext().setVariable(PLAYER_ID, new
Value(player.getID());*
*
*
And I want to use this variable in rules to determine which objects belong
to each player.

This rule works fine when just using ?PLAYER_ID
*(defrule myUnitSeen *
*   (unit (ID ?id) (typeID ?typeID) (player ?PLAYER_ID))*
*=*
* .)*
*
*
But when I try to negate the variable I get an error, First use of
variable negated: PLAYER_ID
*(defrule enemyUnitSeen *
*   (unit (ID ?id) (typeID ?typeID) (player ~?PLAYER_ID))*
*=*
* .)*
*
*
How can I specify anything other than ?PLAYER_ID on the lhs of a rule?

Thanks,
Hunter McMillen


Re: JESS: [EXTERNAL] How to negate a variable when in lhs of a rule

2012-01-11 Thread Friedman-Hill, Ernest
The asterisks are part of the defglobal's name. You're not comparing to the 
defglobal: you're binding the value in the slot to a new variable. It's not 
legal to negate such a constraint in its first use, as the error message said. 
You need to use

 (unit (ID ?id) (typeID ?typeID) (player ~?*PLAYER_ID*))


From: Hunter McMillen mcmil...@gmail.commailto:mcmil...@gmail.com
Reply-To: jess-users@sandia.govmailto:jess-users@sandia.gov
Date: Wed, 11 Jan 2012 14:38:31 -0500
To: jess-users@sandia.govmailto:jess-users@sandia.gov
Subject: JESS: [EXTERNAL] How to negate a variable when in lhs of a rule

Hi everyone,

I am trying to differentiate between Objects that belong to a certain user 
inside two of my rules.

I have a variable created from Java like this:

engine.getGlobalContext().setVariable(PLAYER_ID, new Value(player.getID());

And I want to use this variable in rules to determine which objects belong to 
each player.

This rule works fine when just using ?PLAYER_ID
(defrule myUnitSeen
   (unit (ID ?id) (typeID ?typeID) (player ?PLAYER_ID))
=
 .)

But when I try to negate the variable I get an error, First use of variable 
negated: PLAYER_ID
(defrule enemyUnitSeen
   (unit (ID ?id) (typeID ?typeID) (player ~?PLAYER_ID))
=
 .)

How can I specify anything other than ?PLAYER_ID on the lhs of a rule?

Thanks,
Hunter McMillen


Re: JESS: [EXTERNAL] How to negate a variable when in lhs of a rule

2012-01-11 Thread Hunter McMillen
I placed the asterisks around PLAYER_ID then still received an error when
the rule fired:  No such variable *PLAYER_ID* But then noticed that when
I call setVariable, I name the variable PLAYER_ID not *PLAYER_ID* so I
changed my statement to this:

*engine.getGlobalContext().setVariable(*PLAYER_ID*, new
Value(player.getID());*

and everything works fine.

Does* getGlobalContext().setVariable(...)* define global variables
implicitly? or do you have to include the asterisks like I did?

Thanks.
Hunter McMillen

On Wed, Jan 11, 2012 at 3:13 PM, Friedman-Hill, Ernest
ejfr...@sandia.govwrote:

  The asterisks are part of the defglobal's name. You're not comparing to
 the defglobal: you're binding the value in the slot to a new variable. It's
 not legal to negate such a constraint in its first use, as the error
 message said. You need to use

  * (unit (ID ?id) (typeID ?typeID) (player ~?*PLAYER_ID*))*


   From: Hunter McMillen mcmil...@gmail.com
 Reply-To: jess-users@sandia.gov
 Date: Wed, 11 Jan 2012 14:38:31 -0500
 To: jess-users@sandia.gov
 Subject: JESS: [EXTERNAL] How to negate a variable when in lhs of a rule

  Hi everyone,

  I am trying to differentiate between Objects that belong to a certain
 user inside two of my rules.

  I have a variable created from Java like this:

  *engine.getGlobalContext().setVariable(PLAYER_ID, new
 Value(player.getID());*
 *
 *
 And I want to use this variable in rules to determine which objects belong
 to each player.

  This rule works fine when just using ?PLAYER_ID
 *(defrule myUnitSeen *
 *   (unit (ID ?id) (typeID ?typeID) (player ?PLAYER_ID))*
 *=*
 * .)*
 *
 *
 But when I try to negate the variable I get an error, First use of
 variable negated: PLAYER_ID
  *(defrule enemyUnitSeen *
 *   (unit (ID ?id) (typeID ?typeID) (player ~?PLAYER_ID))*
 *=*
 * .)*
  *
 *
 How can I specify anything other than ?PLAYER_ID on the lhs of a rule?

  Thanks,
 Hunter McMillen



Re: JESS: [EXTERNAL] How to negate a variable when in lhs of a rule

2012-01-11 Thread Friedman-Hill, Ernest
For everything to work right, you always have to use the asterisks (as I said, 
they're part of the name), and you must include a (defglobal)  declaration 
before using the variable. Setting a global variable by hand without 
declaring it first produces undefined results (I.e., it'll work right some of 
the time.)

From: Hunter McMillen mcmil...@gmail.commailto:mcmil...@gmail.com
Reply-To: jess-users@sandia.govmailto:jess-users@sandia.gov
Date: Wed, 11 Jan 2012 16:37:11 -0500
To: jess-users@sandia.govmailto:jess-users@sandia.gov
Subject: Re: JESS: [EXTERNAL] How to negate a variable when in lhs of a rule

I placed the asterisks around PLAYER_ID then still received an error when the 
rule fired:  No such variable *PLAYER_ID* But then noticed that when I call 
setVariable, I name the variable PLAYER_ID not *PLAYER_ID* so I changed my 
statement to this:

engine.getGlobalContext().setVariable(*PLAYER_ID*, new Value(player.getID());

and everything works fine.

Does getGlobalContext().setVariable(...) define global variables implicitly? or 
do you have to include the asterisks like I did?

Thanks.
Hunter McMillen

On Wed, Jan 11, 2012 at 3:13 PM, Friedman-Hill, Ernest 
ejfr...@sandia.govmailto:ejfr...@sandia.gov wrote:
The asterisks are part of the defglobal's name. You're not comparing to the 
defglobal: you're binding the value in the slot to a new variable. It's not 
legal to negate such a constraint in its first use, as the error message said. 
You need to use

 (unit (ID ?id) (typeID ?typeID) (player ~?*PLAYER_ID*))


From: Hunter McMillen mcmil...@gmail.commailto:mcmil...@gmail.com
Reply-To: jess-users@sandia.govmailto:jess-users@sandia.gov
Date: Wed, 11 Jan 2012 14:38:31 -0500
To: jess-users@sandia.govmailto:jess-users@sandia.gov
Subject: JESS: [EXTERNAL] How to negate a variable when in lhs of a rule

Hi everyone,

I am trying to differentiate between Objects that belong to a certain user 
inside two of my rules.

I have a variable created from Java like this:

engine.getGlobalContext().setVariable(PLAYER_ID, new Value(player.getID());

And I want to use this variable in rules to determine which objects belong to 
each player.

This rule works fine when just using ?PLAYER_ID
(defrule myUnitSeen
   (unit (ID ?id) (typeID ?typeID) (player ?PLAYER_ID))
=
 .)

But when I try to negate the variable I get an error, First use of variable 
negated: PLAYER_ID
(defrule enemyUnitSeen
   (unit (ID ?id) (typeID ?typeID) (player ~?PLAYER_ID))
=
 .)

How can I specify anything other than ?PLAYER_ID on the lhs of a rule?

Thanks,
Hunter McMillen