[rules-users] What is inference and how does it facilitate good rule design and maintenance

Wolfgang Laun wolfgang.laun at gmail.com
Tue Nov 10 06:20:04 EST 2009


Leo's reply reads:
"In this scenario, aren't we moving logic that would be better
expressed in a declarative form (drl) to facts that are coded in
java?"

I don't think this is an issue. Extracting a fact's property derived
from one or more constraints being true as an additional fact isn't
doing what Leo is afraid of at all. The CEs resulting in the assertion
of this inferred relation are still there in the DRL.

I'd be more worried about the consequences of using this approach
heavily, in large scale Fact DBs. Adding, to N basic entity facts O(N)
additional facts that just express the truth value of a simple or
compound constraint is bound to have some impact on resource
requirements.

-*-

It is, however, very desirable to be able to write LHS in a more
structured way, not being forced to either repeat CEs or create
additional facts establishing secondary properties (such as isAdult).

However, the abstraction technique for expressions (and this includes
the Boolean expressions in LHS) has been invented a long time ago:
functions! If we were able to define a CE function (I'll use
"property" to distinguish this from plain DRL functions) like this

   <result-type> property <name>( <fact-type> <name> ){ <expression> }

and use this in LHS the way we are used to, e.g.

  boolean property adult(  Person p){ p.age >= 18}

  rule x
  when
      Person( ..., adult == true )
  then ... end

It should also be possible to define property functions with multiple
fact arguments, or functions with additional parameters that aren't
fact types, e.g.

  double property weight( Thing t, double rho ){ t.volume*rho }

  rule y
     $m : Material( $rho : density )
    Thing( material == m, weight( $rho ) > 1000 )

-W


On Tue, Nov 10, 2009 at 11:13 AM, Leonardo Gomes
<leonardo.f.gomes at gmail.com> wrote:
> I think I missed something on that post. Just posted a reply.
>
> Cheers,
> Leo.
>
> On Tue, Nov 10, 2009 at 3:05 AM, Mark Proctor <mproctor at codehaus.org> wrote:
>> Just published this, where I'm trying to explain good rule design in
>> terms more familiar to software developers.
>> http://blog.athico.com/2009/11/what-is-inference-and-how-does-it.html
>>
>> Let me know what you think, and hopefully people have other ideas they
>> can add back in.
>>
>> Mark
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>



More information about the rules-users mailing list