Designing syntax well is not easy. With extensions, one should strive for as much<br>conformity with the existing language, while trying to follow general principles.<br><br>One might have discussed (for instance) the use of field names for referencing<br>
the query relations, taken from their parameter definition. And then one could write,<br>as usual:<br><br>    ?editableThings(food: thing, location == loc )<br><br>or<br><br>    ?editableThings(food: thing, loc: location )<br>
<br>And the in/out is clear to all who know a little legacy DRL.<br><br>And the ugly semicolon evaporates.<br><br>And the maintainability/readability disadvantage of &quot;positional&quot; is gone.<br><br>Cheers<br>-W<br>
<br><br>On 20 April 2011 22:52, Michael Anstis &lt;<a href="mailto:michael.anstis@gmail.com">michael.anstis@gmail.com</a>&gt; wrote:<br>&gt;<br>&gt; Simple yes, but consistent too should be a factor.<br>&gt;<br>&gt; Most questions we have to the user mailing list involve people writing DRL not using tooling.<br>
&gt;<br>&gt; So DRL, IMO, has to be seen as the &quot;tool&quot; to author rules. Drop the proposed colon altogether or make it&#39;s use consistent.<br>&gt;<br>&gt; On 20 April 2011 17:42, Mark Proctor &lt;<a href="mailto:mproctor@codehaus.org">mproctor@codehaus.org</a>&gt; wrote:<br>
&gt;&gt;<br>&gt;&gt; My personally opinion is to keep the language simple and instead have the tooling inject what ever is necessary as a visulation. Be it different colouring, hover over or graphic symbol. It keeps the language simple and actually achieve the desired result better.<br>
&gt;&gt;<br>&gt;&gt; Mark<br>&gt;&gt; On 20/04/2011 14:00, Leonardo Gomes wrote:<br>&gt;&gt;<br>&gt;&gt; +1 for Michael&#39;s suggestion.<br>&gt;&gt;<br>&gt;&gt; It&#39;s a bit more verbose, but makes things clear.<br>&gt;&gt;<br>
&gt;&gt; The semicolon here:<br>&gt;&gt; ?editableThings(food : ?, loc;)<br>&gt;&gt;<br>&gt;&gt; Is a typo, right? You actually meant:<br>&gt;&gt;<br>&gt;&gt; ?editableThings(food : ?, loc);<br>&gt;&gt;<br>&gt;&gt; - Leo.<br>
&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; On Wed, Apr 20, 2011 at 11:59 AM, Michael Anstis &lt;<a href="mailto:michael.anstis@gmail.com">michael.anstis@gmail.com</a>&gt; wrote:<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; Hmmmmm....<br>
&gt;&gt;&gt;<br>&gt;&gt;&gt; Personally, I don&#39;t like the use of &quot;:&quot; i isolation as it&#39;s what we currently use to bind variables and I feel &quot;cheese:&quot; as an output definition could just make people question whether they&#39;ve missed something. Perhaps &quot;cheese : ?&quot; would be a viable alternative. This would be in keeping with (a) current variable declaration, (b) the use of &quot;?&quot; to identify a call to a query. Geoffrey&#39;s examples would then become:-<br>
&gt;&gt;&gt;<br>&gt;&gt;&gt; rule outputinput<br>&gt;&gt;&gt; when<br>&gt;&gt;&gt;     Here( loc : location)<br>&gt;&gt;&gt;     ?editableThings(food : ?, loc;)<br>&gt;&gt;&gt; then<br>&gt;&gt;&gt;     System.out.println(&quot;Food &quot; + food + &quot; at location &quot; + loc);<br>
&gt;&gt;&gt;     // Output:<br>&gt;&gt;&gt;     // Food crackers at location kitchen<br>&gt;&gt;&gt;     // Food apple at location kitchen<br>&gt;&gt;&gt; end<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; rule outputOutput<br>&gt;&gt;&gt; when<br>
&gt;&gt;&gt;     ?editableThings(food : ?, loc : ?;)<br>&gt;&gt;&gt; then<br>&gt;&gt;&gt;     System.out.println(&quot;Food &quot; + food + &quot; at location &quot; + loc);<br>&gt;&gt;&gt;     // Output:<br>&gt;&gt;&gt;     // Food crackers at location kitchen<br>
&gt;&gt;&gt;     // Food apple at location kitchen<br>&gt;&gt;&gt;     // Food chocolate at location living room<br>&gt;&gt;&gt;     // Food chips at location living room<br>&gt;&gt;&gt; end<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; rule typo<br>
&gt;&gt;&gt; when<br>&gt;&gt;&gt;     Here( looc : location)<br>&gt;&gt;&gt;     ?editableThings(food : ?, loc : ?;)<br>&gt;&gt;&gt; then<br>&gt;&gt;&gt;     System.out.println(&quot;Food &quot; + food + &quot; at location &quot; + loc);<br>
&gt;&gt;&gt;     // Output:<br>&gt;&gt;&gt;     // Food crackers at location kitchen<br>&gt;&gt;&gt;     // Food apple at location kitchen<br>&gt;&gt;&gt;     // Food chocolate at location living room<br>&gt;&gt;&gt;     // Food chips at location living room<br>
&gt;&gt;&gt;     // looc is just an unused bound variable<br>&gt;&gt;&gt; end<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; On 20 April 2011 10:16, Geoffrey De Smet &lt;<a href="mailto:ge0ffrey.spam@gmail.com">ge0ffrey.spam@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Mark and I were discussing backwards chaining<br>&gt;&gt;&gt;&gt;   <a href="http://blog.athico.com/2011/04/backward-chaining-emerges-in-drools.html">http://blog.athico.com/2011/04/backward-chaining-emerges-in-drools.html</a><br>
&gt;&gt;&gt;&gt; on IRC and we &#39;d like your opinion on a design issue.<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; The example<br>&gt;&gt;&gt;&gt; ========<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Let&#39;s say you have this data:<br>
&gt;&gt;&gt;&gt;   Location(&quot;crackers&quot;, &quot;kitchen&quot;)<br>&gt;&gt;&gt;&gt;   Location(&quot;apple&quot;, &quot;kitchen&quot;)<br>&gt;&gt;&gt;&gt;   Location(&quot;chocolate&quot;, &quot;living room&quot;)<br>
&gt;&gt;&gt;&gt;   Location(&quot;chips&quot;, &quot;living room&quot;)<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Let&#39;s say you have this code:<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; query editableThings( String thing, String location )<br>
&gt;&gt;&gt;&gt;     Location(thing, location)<br>&gt;&gt;&gt;&gt; end<br>&gt;&gt;&gt;&gt; And then these 3 rules:<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; rule outputinput<br>&gt;&gt;&gt;&gt; when<br>&gt;&gt;&gt;&gt;     Here( loc : location)<br>
&gt;&gt;&gt;&gt;     ?editableThings(food, loc;)<br>&gt;&gt;&gt;&gt; then<br>&gt;&gt;&gt;&gt;     System.out.println(&quot;Food &quot; + f + &quot; at location &quot; + loc);<br>&gt;&gt;&gt;&gt;     // Output:<br>&gt;&gt;&gt;&gt;     // Food crackers at location kitchen<br>
&gt;&gt;&gt;&gt;     // Food apple at location kitchen<br>&gt;&gt;&gt;&gt; end<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; rule outputOutput<br>&gt;&gt;&gt;&gt; when<br>&gt;&gt;&gt;&gt;     ?editableThings(food, loc;)<br>&gt;&gt;&gt;&gt; then<br>
&gt;&gt;&gt;&gt;     System.out.println(&quot;Food &quot; + f + &quot; at location &quot; + loc);<br>&gt;&gt;&gt;&gt;     // Output:<br>&gt;&gt;&gt;&gt;     // Food crackers at location kitchen<br>&gt;&gt;&gt;&gt;     // Food apple at location kitchen<br>
&gt;&gt;&gt;&gt;     // Food chocolate at location living room<br>&gt;&gt;&gt;&gt;     // Food chips at location living room<br>&gt;&gt;&gt;&gt; end<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; rule typo<br>&gt;&gt;&gt;&gt; when<br>
&gt;&gt;&gt;&gt;     Here( looc : location)<br>&gt;&gt;&gt;&gt;     ?editableThings(food, loc;)<br>&gt;&gt;&gt;&gt; then<br>&gt;&gt;&gt;&gt;     System.out.println(&quot;Food &quot; + f + &quot; at location &quot; + loc);<br>
&gt;&gt;&gt;&gt;     // Output:<br>&gt;&gt;&gt;&gt;     // Food crackers at location kitchen<br>&gt;&gt;&gt;&gt;     // Food apple at location kitchen<br>&gt;&gt;&gt;&gt;     // Food chocolate at location living room<br>&gt;&gt;&gt;&gt;     // Food chips at location living room<br>
&gt;&gt;&gt;&gt; end<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; The discussion<br>&gt;&gt;&gt;&gt; =========<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Both rules have the same statement:<br>&gt;&gt;&gt;&gt;   ?editableThings(food, loc;)<br>
&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; In the outputInput rule, &quot;loc&quot; is an input variable.<br>&gt;&gt;&gt;&gt; In the outputOutput rule, &quot;loc&quot; is an output variable.<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; I am wondering if we don&#39;t need a visual demarcation that a variable is an output variable,<br>
&gt;&gt;&gt;&gt; to make it stand out of an input variable?<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; Proposition 1: Suffix output variables with &quot;:&quot;<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; rule outputinput<br>&gt;&gt;&gt;&gt; when<br>
&gt;&gt;&gt;&gt;     Here( loc : location)<br>&gt;&gt;&gt;&gt;     ?editableThings(food:, loc;)<br>&gt;&gt;&gt;&gt; then ... end<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; rule outputOutput<br>&gt;&gt;&gt;&gt; when<br>&gt;&gt;&gt;&gt;     ?editableThings(food:, loc:;)<br>
&gt;&gt;&gt;&gt; then ... end<br>&gt;&gt;&gt;&gt; rule typo<br>&gt;&gt;&gt;&gt; when<br>&gt;&gt;&gt;&gt;     Here( looc : location)<br>&gt;&gt;&gt;&gt;     ?editableThings(food:, loc;) // compiler error because input variable loc is not declared<br>
&gt;&gt;&gt;&gt; then ... end<br>&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;&gt; --<br>&gt;&gt;&gt;&gt; With kind regards,<br>&gt;&gt;&gt;&gt; Geoffrey De Smet<br>&gt;&gt;&gt;&gt; _______________________________________________<br>&gt;&gt;&gt;&gt; rules-dev mailing list<br>
&gt;&gt;&gt;&gt; <a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>&gt;&gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
&gt;&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; _______________________________________________<br>&gt;&gt;&gt; rules-dev mailing list<br>&gt;&gt;&gt; <a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
&gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>&gt;&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; _______________________________________________<br>
&gt;&gt; rules-dev mailing list<br>&gt;&gt; <a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; _______________________________________________<br>&gt;&gt; rules-dev mailing list<br>&gt;&gt; <a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
&gt;&gt;<br>&gt;<br>&gt;<br>&gt; _______________________________________________<br>&gt; rules-dev mailing list<br>&gt; <a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
&gt;<br><br>