[rules-dev] Backwards chaining: the difference between input and output variables

Leonardo Gomes leonardo.f.gomes at gmail.com
Wed Apr 20 09:00:08 EDT 2011


+1 for Michael's suggestion.

It's a bit more verbose, but makes things clear.

The semicolon here:
?editableThings(food : ?, loc;)

Is a typo, right? You actually meant:

?editableThings(food : ?, loc)*;*

- Leo.



On Wed, Apr 20, 2011 at 11:59 AM, Michael Anstis
<michael.anstis at gmail.com>wrote:

> Hmmmmm....
>
> Personally, I don't like the use of ":" i isolation as it's what we
> currently use to bind variables and I feel "cheese:" as an output definition
> could just make people question whether they've missed something. Perhaps
> "cheese : ?" would be a viable alternative. This would be in keeping with
> (a) current variable declaration, (b) the use of "?" to identify a call to a
> query. Geoffrey's examples would then become:-
>
>
> rule outputinput
> when
>     Here( loc : location)
>     ?editableThings(food : ?, loc;)
> then
>     System.out.println("Food " + food + " at location " + loc);
>
>     // Output:
>     // Food crackers at location kitchen
>     // Food apple at location kitchen
> end
>
> rule outputOutput
> when
>     ?editableThings(food : ?, loc : ?;)
> then
>     System.out.println("Food " + food + " at location " + loc);
>
>     // Output:
>     // Food crackers at location kitchen
>     // Food apple at location kitchen
>     // Food chocolate at location living room
>     // Food chips at location living room
> end
>
>  rule typo
> when
>     Here( looc : location)
>     ?editableThings(food : ?, loc : ?;)
> then
>     System.out.println("Food " + food + " at location " + loc);
>
>     // Output:
>     // Food crackers at location kitchen
>     // Food apple at location kitchen
>     // Food chocolate at location living room
>     // Food chips at location living room
>     // looc is just an unused bound variable
> end
>
>
> On 20 April 2011 10:16, Geoffrey De Smet <ge0ffrey.spam at gmail.com> wrote:
>
>>  Mark and I were discussing backwards chaining
>>   http://blog.athico.com/2011/04/backward-chaining-emerges-in-drools.html
>> on IRC and we 'd like your opinion on a design issue.
>>
>> The example
>> ========
>>
>> Let's say you have this data:
>>   Location("crackers", "kitchen")
>>   Location("apple", "kitchen")
>>   Location("chocolate", "living room")
>>   Location("chips", "living room")
>>
>> Let's say you have this code:
>>
>> query editableThings( String thing, String location )
>>     Location(thing, location)
>> end
>>
>> And then these 3 rules:
>>
>> rule outputinput
>> when
>>     Here( loc : location)
>>     ?editableThings(food, loc;)
>> then
>>     System.out.println("Food " + f + " at location " + loc);
>>     // Output:
>>     // Food crackers at location kitchen
>>     // Food apple at location kitchen
>> end
>>
>> rule outputOutput
>> when
>>     ?editableThings(food, loc;)
>> then
>>     System.out.println("Food " + f + " at location " + loc);
>>     // Output:
>>     // Food crackers at location kitchen
>>     // Food apple at location kitchen
>>     // Food chocolate at location living room
>>     // Food chips at location living room
>> end
>>
>>  rule typo
>> when
>>     Here( looc : location)
>>     ?editableThings(food, loc;)
>> then
>>     System.out.println("Food " + f + " at location " + loc);
>>     // Output:
>>     // Food crackers at location kitchen
>>     // Food apple at location kitchen
>>     // Food chocolate at location living room
>>     // Food chips at location living room
>> end
>>
>>
>>  The discussion
>> =========
>>
>> Both rules have the same statement:
>>   ?editableThings(food, loc;)
>>
>> In the outputInput rule, "loc" is an input variable.
>> In the outputOutput rule, "loc" is an output variable.
>>
>> I am wondering if we don't need a visual demarcation that a variable is an
>> output variable,
>> to make it stand out of an input variable?
>>
>> Proposition 1: Suffix output variables with ":"
>>
>> rule outputinput
>> when
>>     Here( loc : location)
>>     ?editableThings(food:, loc;)
>> then ... end
>>
>>  rule outputOutput
>> when
>>     ?editableThings(food:, loc:;)
>> then ... end
>>
>> rule typo
>> when
>>     Here( looc : location)
>>     ?editableThings(food:, loc;) // compiler error because input variable
>> loc is not declared
>> then ... end
>>
>>
>> --
>> With kind regards,
>> Geoffrey De Smet
>>
>> _______________________________________________
>> rules-dev mailing list
>> rules-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-dev
>>
>>
>
> _______________________________________________
> rules-dev mailing list
> rules-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-dev/attachments/20110420/e75e77d9/attachment.html 


More information about the rules-dev mailing list