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

Michael Anstis michael.anstis at gmail.com
Wed Apr 20 05:59:02 EDT 2011


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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-dev/attachments/20110420/724d4d63/attachment-0001.html 


More information about the rules-dev mailing list