[plt-scheme] contract question
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
> >>
> >>
> >
>
>