[plt-scheme] contract question

From: Robby Findler (robby at cs.uchicago.edu)
Date: Wed Feb 6 09:29:26 EST 2008

Oh, sure. I know you consulted this. The docs below are not just more
elaborate, but a tutorial that didn't exist before. The docs that are
comparable to what's in Help Desk are here:

http://pre.plt-scheme.org/docs/html/reference/contracts.html

Robby

On Feb 6, 2008 8:22 AM, Jos Koot <jos.koot at telefonica.net> wrote:
> Thanks, that is clear now.
> Of course I already consulted the help desk. Thanks too for the pointer to
> the more elaborated doc.
> Jos
>
>
> ----- Original Message -----
> From: "Robby Findler" <robby at cs.uchicago.edu>
> To: "Jos Koot" <jos.koot at telefonica.net>
> Cc: "Dave Gurnell" <d.j.gurnell at gmail.com>; <plt-scheme at list.cs.brown.edu>
> Sent: Wednesday, February 06, 2008 3:09 PM
> Subject: Re: [plt-scheme] contract question
>
>
> > We're still figuring out how or/c should work in the general
> > higher-order case. For now, it only accepts a single non-flat
> > contract. That is, you can write:
> >
> >  (or/c false/c (-> integer? integer?))
> >
> > using or/c.
> >
> > In v4, the arrow contract notation has been cleaned up, so looks a
> > little bit different, and so the new documentation uses it instead,
> > but you might find this useful:
> >
> >  http://pre.plt-scheme.org/docs/html/guide/contracts.html
> >
> > Robby
> >
> > On Feb 6, 2008 7:26 AM, Jos Koot <jos.koot at telefonica.net> wrote:
> >>
> >>
> >> (case (-> ..) (-> ..)) works perfect. Why did I miss that? It is in the
> >> docs, although at the very end of the chapter.
> >>
> >> I did already go along the line of your example with ->*, but it is less
> >> restrictive than I want.
> >>
> >> Thanks,
> >> Jos
> >>
> >>
> >> ----- Original Message -----
> >> From: Dave Gurnell
> >> To: plt-scheme at list.cs.brown.edu
> >> Sent: Wednesday, February 06, 2008 2:04 PM
> >> Subject: Re: [plt-scheme] contract question
> >>
> >> I'm not sure why you can't use or/c (see below), but you should be able
> >> to
> >> use ->* or case->:
> >>
> >>
> >>
> >>
> >>     (define (example a (b #f))
> >>       (if b (+ a b) (void)))
> >>
> >> ->* specifies contracts for variable arity procedures:
> >>
> >>
> >>
> >>     (provide/contract
> >>      (example (->* (number?) (number?) (or/c number? void?))))
> >>
> >> case-> is intended for contracts on case-lambdas, but it should work okay
> >> here:
> >>
> >>
> >>
> >>     (provide/contract
> >>      (example (case-> (-> number? number? number?)
> >>                       (-> number? void?))))
> >>
> >>
> >> I thought or/c could only be used on value contracts but the
> >> documentation
> >> suggests otherwise.
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >> Cheers,
> >>
> >>
> >> -- Dave
> >>
> >>
> >>
> >>
> >> Finally I decided to try contracts. I tried:
> >>
> >> #| require one or two numbers
> >>    promise to return a number if two numbers are given
> >>    promise void if one number is given |#
> >>
> >> #lang scheme
> >>
> >> (provide/contract
> >>  (example
> >>   (or/c
> >>    (-> number? number? number?)
> >>    (-> number? void?))))
> >>
> >> (define (example a (b #f))
> >>  (if b (+ a b) (void)))
> >>
> >> This compiles, but it wont run:
> >>
> >> Welcome to DrScheme, version 3.99.0.10-svn4feb2008 [3m].
> >> Language: Module custom.
> >> or/c: two arguments, (-> number? void?) and (-> number? number? number?),
> >> might both match #<procedure:example>
> >>
> >> Why? What is wrong in my contract? May be I am wanting an impossible
> >> contract?
> >> or/c repeats exactly what I want, but does not accept it.
> >> I think I am missing something fundamental, but I can't find an answer in
> >> the docs.
> >> Thanks, Jos Koot_________________________________________________
> >>  For list-related administrative tasks:
> >>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme
> >>
> >>
> >>
> >>  ________________________________
> >>
> >>
> >>
> >> _________________________________________________
> >>   For list-related administrative tasks:
> >>   http://list.cs.brown.edu/mailman/listinfo/plt-scheme
> >>
> >> _________________________________________________
> >>   For list-related administrative tasks:
> >>   http://list.cs.brown.edu/mailman/listinfo/plt-scheme
> >>
> >>
> >
>
>


Posted on the users mailing list.