[plt-scheme] Contract Request

From: Williams, M. Douglas (M.DOUGLAS.WILLIAMS at saic.com)
Date: Mon Apr 10 08:13:12 EDT 2006

Thanks, that works for me.  It's probably a better solution anyway since
sometimes I want #f as an alternative.

Doug

> -----Original Message-----
> From: robby at cs.uchicago.edu [mailto:robby at cs.uchicago.edu]
> Sent: Sunday, April 09, 2006 9:58 PM
> To: Williams, M. Douglas
> Cc: plt-scheme at list.cs.brown.edu
> Subject: Re: [plt-scheme] Contract Request
> 
> I've added one-of/c that behaves like symbols, but allows whatever
> values you want and uses eqv? to compare them.
> 
> I'm not entirely sure that this is the right thing and am considering
> restricting one-of/c to only accept things like symbols, numbers,
> booleans, characters, keywords, null and other atomic values I may be
> forgetting. But it is there without restriction for now, in SVN.
> 
> Robby
> 
> At Sun, 9 Apr 2006 16:06:03 -0700 , "Williams, M. Douglas" wrote:
> > I have begun using keywords in several of my collections.  One problem I
> > have is that there are no predefined contracts - that I know of, anyway
> -
> > for recognizing them.  Would it be possible to get 'keywords' added as a
> > contract that would be the same as 'symbols', but for matching against
> > keywords.
> >
> > An implementation that works, based on the definition of symbols is:
> >
> >   (define (keywords . ss)
> >     (unless ((length ss) . >= . 1)
> >       (error 'keywords "expected at least one argument"))
> >     (unless (andmap keyword? ss)
> >       (error 'keywords "expected keywords as arguments, given: ~a"
> > 	     (apply string-append (map (lambda (x) (format "~e " x)) ss))))
> >     (flat-named-contract
> >      `(keywords ,@(map (lambda (x) x) ss))
> >      (lambda (x)
> >        (memq x ss))))
> >
> > Doug
> >
> > _________________________________________________
> >   For list-related administrative tasks:
> >   http://list.cs.brown.edu/mailman/listinfo/plt-scheme


Posted on the users mailing list.