If (implies a b ... z) is equivalent to (implies a (implies b ... z)), then it is also equivalent to (implies (and a b ...) z).  In which case, the 1-ary case should be clear: just return z.  In truth, it is not really necessary to have n-ary implies if you&#39;re willing to nest the (and ...) explicitly.  Given that Scheme/Racket n-ary operators tend to have the &quot;...&quot; last, with occasional exceptions like list* and apply, restricting implies to 2 arguments might avoid cases where (implies a b c d e) is confusing to read.  (implies (and a b c d) e) is clearer.<br>

<br clear="all">Carl Eastlund<br>
<br><div class="gmail_quote">On Sun, Feb 19, 2012 at 8:16 PM, Robby Findler <span dir="ltr">&lt;<a href="mailto:robby@eecs.northwestern.edu">robby@eecs.northwestern.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="HOEnZb"><div class="h5">On Sun, Feb 19, 2012 at 7:10 PM, Neil Toronto &lt;<a href="mailto:neil.toronto@gmail.com">neil.toronto@gmail.com</a>&gt; wrote:<br>
&gt; On 02/19/2012 06:05 AM, Robby Findler wrote:<br>
&gt;&gt;<br>
&gt;&gt; On Sun, Feb 19, 2012 at 12:30 AM, Gary Baumgartner&lt;<a href="mailto:gfb@cs.toronto.edu">gfb@cs.toronto.edu</a>&gt;<br>
&gt;&gt;  wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On a more productive note: in Racket code I define and use &#39;implies&#39; a<br>
&gt;&gt;&gt; lot,<br>
&gt;&gt;&gt;  often conjoined, for predicates. It&#39;s mainly of declarative value, which<br>
&gt;&gt;&gt; is<br>
&gt;&gt;&gt;  perhaps why it&#39;s uncommon in implementation despite how common it is in<br>
&gt;&gt;&gt;  specification. And for boolean expressions in general I also use<br>
&gt;&gt;&gt; &#39;neither&#39;.<br>
&gt;&gt;&gt;  Are these something that others [would] use and so could be added to<br>
&gt;&gt;&gt; Racket&#39;s<br>
&gt;&gt;&gt;  library?<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Seems to me adding implies, nand, and nor to racket/bool is a good idea.<br>
&gt;&gt;<br>
&gt;&gt; Let me know if you disagree (and if you disagree after I&#39;ve already<br>
&gt;&gt; committed, it is a simple thing to drop the commit or change it).<br>
&gt;<br>
&gt;<br>
&gt; I&#39;ve occasionally written my own `implies&#39;, but never make it shortcut like<br>
&gt; `and&#39; and `or&#39;. Speaking of which, would it handle more than two arguments?<br>
&gt; One? Zero? What kind of associativity would be appropriate?<br>
<br>
</div></div>The version I checked in shortcuts in an implication-appropriate way<br>
(if the first argument is #f). I think the convention (due to<br>
functions and currying) is pretty well established that it associates<br>
to the right. So that&#39;s what the version I checked in does for the 3+<br>
argument case. I didn&#39;t see something reasonable for the 0 or 2-ary<br>
case so it doesn&#39;t handle them.<br>
<br>
&gt; Bwahaha.<br>
<br>
:)<br>
<br>
I&#39;m still pondering those questions for xor. :)<br>
<span class="HOEnZb"><font color="#888888"><br>
Robby<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</div></div></blockquote></div><br>