[racket] Contract for methods with optional arguments

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Sat Aug 31 08:26:14 EDT 2013

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>

Posted on the users mailing list.