<div dir="ltr">You can simulate and -&gt;im with -&gt;i by adding a mandatory (first) argument with contract any/c.<div><br></div><div>Robby</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sat, Aug 31, 2013 at 6:39 AM, Diego Sevilla Ruiz <span dir="ltr">&lt;<a href="mailto:dsevilla@ditec.um.es" target="_blank">dsevilla@ditec.um.es</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi all:<br>
<br>
        I have encountered a situation in which I don&#39;t know how to specify the contract for a method that:<br>
<br>
1. Has a final optional argument<br>
2. The value of the optional argument makes the method change the return type of the method.<br>
<br>
It is similar to this:<br>
<br>
(define/public (get-whatever (pos #f))<br>
  (if (not pos)<br>
      inner-vector-of-int<br>
      (vector-ref inner-vector-of-int pos)))<br>
<br>
(that is, if you don&#39;t specify a position, return the whole vector, but if you specify a position, return that position).<br>
<br>
        For what I&#39;ve seen in the documentation, there exists the -&gt;i function that allos the specification of named parameters, such as (not working but you get the idea):<br>
<br>
(-&gt;i () ;; mandatory<br>
     ([pos (or/c number? boolean?)])  ;; optional<br>
     [result (pos) (or/c (and/c (=/c #f pos) (vectorof number?))<br>
                         (and/c (number? pos) number?))])<br>
<br>
(I don&#39;t think the result expression is correct, but it expresses what I want).<br>
<br>
        The real problem comes with methods, because I have -&gt;m and -&gt;dm, but not -&gt;im (-&gt;dm does not allow specifying dependent previous values in the result, for example, as far as I know).<br>
<br>
        So the question is, how to write a method contract for this method?<br>
<br>
        Thanks in advance,<br>
        diego.<span class="HOEnZb"><font color="#888888"><br>
<br>
-- <br>
Diego Sevilla Ruiz -- <a href="http://ditec.um.es/~dsevilla/" target="_blank">http://ditec.um.es/~dsevilla/</a> -- <a href="mailto:dsevilla@um.es" target="_blank">dsevilla@um.es</a> _.___<br>
Dep. Ingeniería y Tecnología de Computadores, Facultad de Informática D|TEC<br>
Univ.de Murcia,Campus Espinardo,30080 Murcia (SPAIN),Tel.<a href="tel:%2B34868887571" value="+34868887571" target="_blank">+34868887571</a><br>
____________________<br>
 Racket Users list:<br>
 <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/<u></u>users</a><br>
</font></span></blockquote></div><br></div>