[racket] Contract for methods with optional arguments
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