[PEAK] dispatch -- more specific

Phillip J. Eby pje at telecommunity.com
Tue Dec 13 15:08:29 EST 2005

At 08:54 PM 12/13/2005 +0100, Simon Belak wrote:
>is "more specific" just a measure of the number of logical expressions in 
>a case or is there more to it than that?

It is logical implication.  If there are two conditions X and Y, then X is 
more specific than Y if:

1. whenever X is true, Y is true by definition
2. when Y is true, X may or may not be true

For RuleDispatch to detect these conditions in practice, it must use each 
subexpression condition, and it does not handle any crossover implication 
between types of conditions.  That is, it can know that a==3 implies a<=4 
and a>2, but it does not know that a==3 implies isinstance(a,int).  In 
fact, Python's equality rules don't imply that, either, since a might be 
the float 3.0 or the long 3L.

>What I would like is a strategy where equals (==) is more specific than 
>other relations (e.g. isinstacnte).

You can easily make this so by using a rule like "isinstance(a,int) and 
a==3", which will then be more specific than "isinstance(a,int)".

That is, to force one condition to more specific than another, you need 
only explicitly "and" the less specific condition with the more specific 
one.  This forces it to be more specific by construction, even if 
RuleDispatch could not otherwise infer the implication.

More information about the PEAK mailing list