[racket] Contract for methods with optional arguments
You can simulate and ->im with ->i by adding a mandatory (first) argument
with contract any/c.
Robby
On Sat, Aug 31, 2013 at 6:39 AM, Diego Sevilla Ruiz <dsevilla at ditec.um.es>wrote:
> Hi all:
>
> I have encountered a situation in which I don't know how to
> specify the contract for a method that:
>
> 1. Has a final optional argument
> 2. The value of the optional argument makes the method change the return
> type of the method.
>
> It is similar to this:
>
> (define/public (get-whatever (pos #f))
> (if (not pos)
> inner-vector-of-int
> (vector-ref inner-vector-of-int pos)))
>
> (that is, if you don't specify a position, return the whole vector, but if
> you specify a position, return that position).
>
> For what I've seen in the documentation, there exists the ->i
> function that allos the specification of named parameters, such as (not
> working but you get the idea):
>
> (->i () ;; mandatory
> ([pos (or/c number? boolean?)]) ;; optional
> [result (pos) (or/c (and/c (=/c #f pos) (vectorof number?))
> (and/c (number? pos) number?))])
>
> (I don't think the result expression is correct, but it expresses what I
> want).
>
> The real problem comes with methods, because I have ->m and ->dm,
> but not ->im (->dm does not allow specifying dependent previous values in
> the result, for example, as far as I know).
>
> So the question is, how to write a method contract for this method?
>
> Thanks in advance,
> diego.
>
> --
> Diego Sevilla Ruiz -- http://ditec.um.es/~dsevilla/ -- dsevilla at um.es_.___
> Dep. Ingeniería y Tecnología de Computadores, Facultad de Informática D|TEC
> Univ.de Murcia,Campus Espinardo,30080 Murcia (SPAIN),Tel.+34868887571
> ____________________
> Racket Users list:
> http://lists.racket-lang.org/**users <http://lists.racket-lang.org/users>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20130831/3f8598ec/attachment.html>