<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Precedence</title><link>https://sourceforge.net/p/readable/wiki/Precedence/</link><description>Recent changes to Precedence</description><atom:link href="https://sourceforge.net/p/readable/wiki/Precedence/feed" rel="self"/><language>en</language><lastBuildDate>Wed, 05 Sep 2012 23:35:46 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/readable/wiki/Precedence/feed" rel="self" type="application/rss+xml"/><item><title>WikiPage Precedence modified by David A. Wheeler</title><link>https://sourceforge.net/p/readable/wiki/Precedence/</link><description>&lt;pre&gt;--- v43
+++ v44
@@ -14,7 +14,7 @@
 
 The new "math" ruleset is as follows:
 
-* All even-numbered parameters must be operator symbols, there must be an odd number of parameters, and there must be at least three parameters (it must be *strictly infix*).
+* All even-numbered parameters must be operator symbols, there must be an odd number of parameters, and there must be at least five parameters (it must be *strictly infix*).
 * The operators supported, in precedence order (high to low), are:
     - Subscript/down-arrow: sub {Unicode: &amp;#8595;, &amp;#8659;}
     - Exponentiation/Superscript/up-arrow: \*\*, ^, sup {Unicode: &amp;#8593;, &amp;#8657;} (right-associative)
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David A. Wheeler</dc:creator><pubDate>Wed, 05 Sep 2012 23:35:46 -0000</pubDate><guid>https://sourceforge.netd0aedbfdf75d21220f6d0867228c8a3d3d0f5ffc</guid></item><item><title>WikiPage Precedence modified by David A. Wheeler</title><link>https://sourceforge.net/p/readable/wiki/Precedence/</link><description>&lt;pre&gt;--- v42
+++ v43
@@ -109,4 +109,4 @@
 *   If you have an operator registration systems, where you register the precedence of operations, then you end up with bugs if the definition isn't read first. Even worse, you have trouble combining code when the operators have different precedence.
 *   But if you don't have a registration system, that means you have to have pre-set fixed rules for operators.  Which at least avoids those problems, *and* is consistent with what most other languages do (most languages have fixed precedence systems).  At that point, it's hard to argue that it should be a short list, and you end up with complex systems like this.
 
-I think the important point from this page is that this is proof that accepting curly-infix now does *not* prevent support for precedence in the future.
+I think the important point from this page is that this is proof that accepting curly-infix now does *not* prevent support for precedence in the future.  It also explains why we did *NOT* propose it :-).
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David A. Wheeler</dc:creator><pubDate>Sun, 26 Aug 2012 20:01:23 -0000</pubDate><guid>https://sourceforge.net94b61069406fd06d2b84fd9b6c6e4d62e0d57a7f</guid></item><item><title>WikiPage Precedence modified by David A. Wheeler</title><link>https://sourceforge.net/p/readable/wiki/Precedence/</link><description>&lt;pre&gt;--- v41
+++ v42
@@ -106,7 +106,7 @@
 
 Oh, I'm not *recommending* this precedence system.  Indeed, this is a great example of why precedence systems haven't been widely accepted in Lisps; they get ugly as soon as you look into the details:
 
-*   If you have an operator registration systems, where you register the precedence of operations, then you end up with bugs if the definition isn't read first, and you have trouble combining code when the operators have different precedence.
+*   If you have an operator registration systems, where you register the precedence of operations, then you end up with bugs if the definition isn't read first. Even worse, you have trouble combining code when the operators have different precedence.
 *   But if you don't have a registration system, that means you have to have pre-set fixed rules for operators.  Which at least avoids those problems, *and* is consistent with what most other languages do (most languages have fixed precedence systems).  At that point, it's hard to argue that it should be a short list, and you end up with complex systems like this.
 
 I think the important point from this page is that this is proof that accepting curly-infix now does *not* prevent support for precedence in the future.
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David A. Wheeler</dc:creator><pubDate>Sun, 26 Aug 2012 20:00:33 -0000</pubDate><guid>https://sourceforge.netb2026ff2215ba9948a0c644277a3c57b07bf6c1d</guid></item><item><title>WikiPage Precedence modified by David A. Wheeler</title><link>https://sourceforge.net/p/readable/wiki/Precedence/</link><description>&lt;pre&gt;--- v40
+++ v41
@@ -105,7 +105,8 @@
 ## Comments by dwheeler
 
 Oh, I'm not *recommending* this precedence system.  Indeed, this is a great example of why precedence systems haven't been widely accepted in Lisps; they get ugly as soon as you look into the details:
-* If you have an operator registration systems, where you register the precedence of operations, then you end up with bugs if the definition isn't read first, and you have trouble combining code when the operators have different precedence.
-* But if you don't have a registration system, that means you have to have pre-set fixed rules for operators.  Which at least avoids those problems, *and* is consistent with what most other languages do (most languages have fixed precedence systems).  At that point, it's hard to argue that it should be a short list, and you end up with complex systems like this.
+
+*   If you have an operator registration systems, where you register the precedence of operations, then you end up with bugs if the definition isn't read first, and you have trouble combining code when the operators have different precedence.
+*   But if you don't have a registration system, that means you have to have pre-set fixed rules for operators.  Which at least avoids those problems, *and* is consistent with what most other languages do (most languages have fixed precedence systems).  At that point, it's hard to argue that it should be a short list, and you end up with complex systems like this.
 
 I think the important point from this page is that this is proof that accepting curly-infix now does *not* prevent support for precedence in the future.
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David A. Wheeler</dc:creator><pubDate>Sun, 26 Aug 2012 19:59:51 -0000</pubDate><guid>https://sourceforge.net97441f6289f9690655e24ca0e155f51a71950aad</guid></item><item><title>WikiPage Precedence modified by David A. Wheeler</title><link>https://sourceforge.net/p/readable/wiki/Precedence/</link><description>&lt;pre&gt;--- v39
+++ v40
@@ -6,7 +6,7 @@
 
 That said, it'd be possible to add precedence support, either to this or a future version of curly-infix, as long as the list of operators is a *fixed* definition that is *independent* of a particular Lisp (e.g., focused on "pure" math functions). The key is that, in a Lisp, any precedence rules must be absolutely fixed.  Remember, the reader is used for program data, not just for programs, which often mixed together.  In many cases they're split into multiple files that are loaded, and reloaded, at relatively arbitrary times relative to each other.  If you have to manipulate a table, or declare precedence for operators before reading them, the effort of managing the table becomes too complex (it'd be better to use nfx, which *more* flexible than a table while requiring fewer built-in mechanisms).  Remember, a Lisp program may manage several different languages and meta-levels at once, all mixed together; precedence variation in this circumstance is too confusing.   In particular, if you have to declare operator precedence, it becomes unworkable; there's often no way to be sure that the declaration was read and applied before the operator is seen.  And it becomes a true nightmare if the precedence level definitions disagree (a scoped operator like nfx can deal with this; a Lisp reader is a poor substitute).
 
-If support for precedence is important for acceptance of curly-infix, we *could* add precedence.  So, if precedence is important for its acceptance, or in some future version precedence is considered important, here's a modified curly-infix rule to provide support for precedence (this was the best that David A. Wheeler could come up with).
+If support for precedence is important for acceptance of curly-infix, we *could* add precedence.  So, if precedence is important for its acceptance, or in some future version precedence is considered important, here's a modified curly-infix rule to provide support for precedence (this was the best that David A. Wheeler could come up with).  Perhaps most important, this is proof that accepting curly-infix now does *not* prevent support for precedence in the future.
 
 In this version, you still have to specially call unary functions, e.g.: (- x), -(x), or -{x}... you can't just say {- - x}, since that looks like you're subtracting "x" from "-".  In compensation, this rule is extremely flexible - you can use a large number of different symbols for operators.  I think that "you must specially call all unary functions" is an easy rule to remember and apply.
 
@@ -101,3 +101,11 @@
 My final reaction is "NO".
 
 My final reaction is "NO"
+
+## Comments by dwheeler
+
+Oh, I'm not *recommending* this precedence system.  Indeed, this is a great example of why precedence systems haven't been widely accepted in Lisps; they get ugly as soon as you look into the details:
+* If you have an operator registration systems, where you register the precedence of operations, then you end up with bugs if the definition isn't read first, and you have trouble combining code when the operators have different precedence.
+* But if you don't have a registration system, that means you have to have pre-set fixed rules for operators.  Which at least avoids those problems, *and* is consistent with what most other languages do (most languages have fixed precedence systems).  At that point, it's hard to argue that it should be a short list, and you end up with complex systems like this.
+
+I think the important point from this page is that this is proof that accepting curly-infix now does *not* prevent support for precedence in the future.
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David A. Wheeler</dc:creator><pubDate>Sun, 26 Aug 2012 19:56:14 -0000</pubDate><guid>https://sourceforge.net9482dab772996b7d24dbe04a0ac58b7c4ba5f212</guid></item><item><title>WikiPage Precedence modified by David A. Wheeler</title><link>https://sourceforge.net/p/readable/wiki/Precedence/</link><description>&lt;pre&gt;--- v38
+++ v39
@@ -27,8 +27,8 @@
         - Unranged:  =, ==, !=, \&lt;&gt;, =/=, eq..., in, is {Unicode: &amp;#8800;, &amp;#8776;, &amp;#8773;}
     - Logical conjunction: and {Unicode: &amp;#8745;, &amp;#8743;}
     - Logical/exclusive disjunction: or, xor, eor {Unicode: &amp;#8746;, &amp;#8744;, &amp;#8853;}
-    - Implication/Right Arrows/Doubled arrows: -&gt;, =&gt;,  &lt;-&gt;, &lt;=&gt;, --&gt;, ==&gt;, &lt;--&gt;, &lt;==&gt; {Unicode: &amp;#8596;, &amp;#8660;, &amp;#8592;, &amp;#8656;, &amp;#8594;, &amp;#8658;}
-    - Definition/Assignment/Left arrow: &lt;-, &lt;--, &lt;==, :=, ::=  {Unicode: &amp;#8801;} (right-associative)
+    - Implication/Right Arrows/Doubled arrows: -&gt;, =&gt;,  &lt;-&gt;, &lt;=&gt;, --&gt;, ==&gt;, &lt;--&gt;, &lt;==&gt; {Unicode: &amp;#8596;, &amp;#8660;, &amp;#8594;, &amp;#8658;}
+    - Definition/Assignment/Left arrow: &lt;-, &lt;--, &lt;==, :=, ::=  {Unicode: &amp;#8801;  &amp;#8592;, &amp;#8656;} (right-associative)
 * Other operators are re-compared by removing from its symbol all "-" surrounded by alphanumerics, all alphanumerics, and then all other characters not in an operator above (so "char&lt;=?" is accepted as "&lt;=").  If there's no match, it does not meet the "math" ruleset.
 *  When the same operator is repeated, the operator simply gains another operand, so {a + b + c * d} is the "+" operator applied to three operands: a, b, and (* c d).
 * If different *ranged comparison* operators are used in sequence, they are joined by "and" as follows:  {left compare1 middle compare2 right...} maps to (and (compare1 left middle) (compare2 middle right) ...).
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David A. Wheeler</dc:creator><pubDate>Sun, 26 Aug 2012 19:48:09 -0000</pubDate><guid>https://sourceforge.net29e02b322cc74068260d2d8f37ee1ec9f83045ab</guid></item><item><title>WikiPage Precedence modified by David A. Wheeler</title><link>https://sourceforge.net/p/readable/wiki/Precedence/</link><description>&lt;pre&gt;--- v37
+++ v38
@@ -27,8 +27,8 @@
         - Unranged:  =, ==, !=, \&lt;&gt;, =/=, eq..., in, is {Unicode: &amp;#8800;, &amp;#8776;, &amp;#8773;}
     - Logical conjunction: and {Unicode: &amp;#8745;, &amp;#8743;}
     - Logical/exclusive disjunction: or, xor, eor {Unicode: &amp;#8746;, &amp;#8744;, &amp;#8853;}
-    - Implication/Arrows: -&gt;, =&gt;, &lt;-, &lt;-&gt;, &lt;=&gt;, --&gt;, ==&gt;, &lt;--, &lt;==, &lt;--&gt;, &lt;==&gt; {Unicode: &amp;#8596;, &amp;#8660;, &amp;#8592;, &amp;#8656;, &amp;#8594;, &amp;#8658;}
-    - Definition/Assignment: :=, ::=  {Unicode: &amp;#8801;} (right-associative)
+    - Implication/Right Arrows/Doubled arrows: -&gt;, =&gt;,  &lt;-&gt;, &lt;=&gt;, --&gt;, ==&gt;, &lt;--&gt;, &lt;==&gt; {Unicode: &amp;#8596;, &amp;#8660;, &amp;#8592;, &amp;#8656;, &amp;#8594;, &amp;#8658;}
+    - Definition/Assignment/Left arrow: &lt;-, &lt;--, &lt;==, :=, ::=  {Unicode: &amp;#8801;} (right-associative)
 * Other operators are re-compared by removing from its symbol all "-" surrounded by alphanumerics, all alphanumerics, and then all other characters not in an operator above (so "char&lt;=?" is accepted as "&lt;=").  If there's no match, it does not meet the "math" ruleset.
 *  When the same operator is repeated, the operator simply gains another operand, so {a + b + c * d} is the "+" operator applied to three operands: a, b, and (* c d).
 * If different *ranged comparison* operators are used in sequence, they are joined by "and" as follows:  {left compare1 middle compare2 right...} maps to (and (compare1 left middle) (compare2 middle right) ...).
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David A. Wheeler</dc:creator><pubDate>Sun, 26 Aug 2012 19:46:44 -0000</pubDate><guid>https://sourceforge.net56bd7f709f959d7bfd3c5dc846716706f4dd99fc</guid></item><item><title>WikiPage Precedence modified by Alan Manuel Gloria</title><link>https://sourceforge.net/p/readable/wiki/Precedence/</link><description>&lt;pre&gt;--- v36
+++ v37
@@ -92,10 +92,12 @@
 
 ## Comments by almkglor
 
-My first reaction was "&lt;expletive deleted&gt;".
+My first reaction was "\&lt;expletive deleted&gt;".
 
-My second reaction was "&lt;expletive deleted&gt;".
+My second reaction was "\&lt;expletive deleted&gt;".
 
-My third reaction was "This &lt;expletive deleted&gt; is too complex."
+My third reaction was "This \&lt;expletive deleted&gt; is too complex."
+
+My final reaction is "NO".
 
 My final reaction is "NO"
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Alan Manuel Gloria</dc:creator><pubDate>Thu, 23 Aug 2012 01:18:17 -0000</pubDate><guid>https://sourceforge.net1070abe9e3c5d9616232ee25ab7875d7703d6a7d</guid></item><item><title>WikiPage Precedence modified by Alan Manuel Gloria</title><link>https://sourceforge.net/p/readable/wiki/Precedence/</link><description>&lt;pre&gt;--- v35
+++ v36
@@ -89,3 +89,13 @@
 Thus, I propose to continue with the much simpler rule we have, and then switch to a precedence system if we get too much pushback from the simpler rule.  Or alternatively, make it clear that perhaps someday there could be a more sophisticated curly-infix system, but that it's more important to get basic functionality today.
 
 Comments welcome.
+
+## Comments by almkglor
+
+My first reaction was "&lt;expletive deleted&gt;".
+
+My second reaction was "&lt;expletive deleted&gt;".
+
+My third reaction was "This &lt;expletive deleted&gt; is too complex."
+
+My final reaction is "NO"
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Alan Manuel Gloria</dc:creator><pubDate>Thu, 23 Aug 2012 01:17:39 -0000</pubDate><guid>https://sourceforge.netfce3cb4531f0ec54a583b91fd067174a937ba9ae</guid></item><item><title>WikiPage Precedence modified by David A. Wheeler</title><link>https://sourceforge.net/p/readable/wiki/Precedence/</link><description>&lt;pre&gt;--- v34
+++ v35
@@ -8,11 +8,9 @@
 
 If support for precedence is important for acceptance of curly-infix, we *could* add precedence.  So, if precedence is important for its acceptance, or in some future version precedence is considered important, here's a modified curly-infix rule to provide support for precedence (this was the best that David A. Wheeler could come up with).
 
-The "precedence" form of the curly-infix would be as follows (note the new middle rule):
+In this version, you still have to specially call unary functions, e.g.: (- x), -(x), or -{x}... you can't just say {- - x}, since that looks like you're subtracting "x" from "-".  In compensation, this rule is extremely flexible - you can use a large number of different symbols for operators.  I think that "you must specially call all unary functions" is an easy rule to remember and apply.
 
-1.  If a list is a simple curly-infix list, map to (even-parameter odd-parameters) as now.
-2.  Otherwise, if a list meets the "math" ruleset requirements, use its mapping (see below).
-3.  Otherwise, return the list with the "nfx" symbol added to the front as now.
+The "precedence" form of the curly-infix would add a new rule: "If a curly-infix list isn't simple, if the list meets the "math" ruleset requirements, use its mapping (see below).  Otherwise, return the list with the "nfx" symbol added to the front (as is done now)."
 
 The new "math" ruleset is as follows:
 
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">David A. Wheeler</dc:creator><pubDate>Sun, 19 Aug 2012 00:01:23 -0000</pubDate><guid>https://sourceforge.neta3af9a3d0a0f68756fba2c0ba57e165023e669e3</guid></item></channel></rss>