Yes, the -&gt; is fine. And, so is doing the same bounds check in my own procedure. I was surprised that the -&gt;d was so much slower. I use contracts regularly and was trying to expand my usage of them.<br><br><div class="gmail_quote">
On Sat, Apr 11, 2009 at 12:46 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="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
-&gt;d is definitely substantially slower than the other because the<br>
wrappers are more complex. Are you finding the performance overhead of<br>
the ordinary -&gt; acceptable?<br>
<br>
Robby<br>
<div><div></div><div class="h5"><br>
On Sat, Apr 11, 2009 at 1:17 PM, Doug Williams<br>
&lt;<a href="mailto:m.douglas.williams@gmail.com">m.douglas.williams@gmail.com</a>&gt; wrote:<br>
&gt; I would like to use -&gt;d to impose a precondition for a function.  For<br>
&gt; example:<br>
&gt;<br>
&gt;  (matrix-ref<br>
&gt;   (-&gt;d ((matrix matrix?)<br>
&gt;         (i (and/c exact-nonnegative-integer? (&lt;/c (matrix-rows matrix))))<br>
&gt;         (j (and/c exact-nonnegative-integer? (&lt;/c (matrix-cols matrix)))))<br>
&gt;        ()<br>
&gt;        (result any/c)))<br>
&gt;<br>
&gt; or<br>
&gt;<br>
&gt;  (matrix-ref<br>
&gt;   (-&gt;d ((matrix matrix?)<br>
&gt;         (i exact-nonnegative-integer?)<br>
&gt;         (j exact-nonnegative-integer?))<br>
&gt;        ()<br>
&gt;        #:pre-cond (and (&lt; i (matrix-rows matrix))<br>
&gt;                        (&lt; j (matrix-cols matrix)))<br>
&gt;        (result any/c)))<br>
&gt;<br>
&gt; instead of just<br>
&gt;<br>
&gt;  (matrix-ref<br>
&gt;   (-&gt; matrix? exact-nonnegative-integer? exact-nonnegative-integer? any/c))<br>
&gt;<br>
&gt; The first two do work, but are really, really slow.<br>
&gt;<br>
&gt; I like having the bounds check in the contract (as opposed to bounds check<br>
&gt; in the matrix-ref code, but can&#39;t accept the performance hit. Any ideas?<br>
&gt;<br>
&gt; Doug<br>
&gt;<br>
&gt;<br>
</div></div>&gt; _________________________________________________<br>
&gt;  For list-related administrative tasks:<br>
&gt;  <a href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme" target="_blank">http://list.cs.brown.edu/mailman/listinfo/plt-scheme</a><br>
&gt;<br>
&gt;<br>
</blockquote></div><br>