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/ -- dsevi...@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

Reply via email to