[PRD] Semantic Problems

I have 2 rulesets below that should be equivalent but are not, according 
to our semantics:

Ruleset1:
_o[_p->1]
if _o[_p->1] or _o[_p->2] then Do( (?x _o[_p->?x]) Retract(_o[_p->?x]) 
Assert(_o[_p->?x+1]))

Ruleset2:
_o[_p->1]
if _o[_p->?y] and (?y = 1 or ?y = 2) then Do( (?x _o[_p->?x]) 
Retract(_o[_p->?x]) Assert(_o[_p->?x+1]))

The rule in Ruleset1 will fire only once because its rule instance has 
no variables.  On the other hand, the rule in Ruleset2 will fire twice.

It also strikes me that Do( (?x _o[_p->?x]) is hard to define if _p is 
multi-valued.

Received on Tuesday, 10 February 2009 05:06:54 UTC