:)

Leonardo, the ";" is correct.

"We have adopted the RuleML's POSL (Positional Slotted Language) approach to mixing positional terms and OO named arg arguments.... blah blah.

Just to explain positional arguments are ones where you don't need to specify the field name, as the position maps to a known named field. i.e. Person( name == "mark" ) can be rewritten as Person( "mark"; ). The ; is important so that we know when that everything before it is a positional argument. Otherwise we might assume it was a boolean expression, which is how it could be interpretted after the ; "

So the ";" acts to separate slotted\named parameters and positional.

With kind regards,

Mike

On 20 April 2011 14:00, Leonardo Gomes <leonardo.f.gomes@gmail.com> wrote:
+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@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@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@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-dev



_______________________________________________
rules-dev mailing list
rules-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-dev



_______________________________________________
rules-dev mailing list
rules-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-dev