[plt-scheme] mutual recursion in contracts
On May 7, 2004, at 4:52 PM, David A. Herman wrote:
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
> Matthias Felleisen wrote:
>
> > That's not a question of lazy ornot, it's a question of providing a
> > form for mut rec types.
>
> Sure, laziness would just be one implementation strategy that would
> allow for mutual recursion. But that's a good point: I don't care
> *how* it's implemented, I just want mutually recursive contracts.
>
>> David A. Herman wrote:
> > [snip]
>> (define-type even ([pred (union odd? #f)]))
>> (define-type odd ([pred even?]))
>
> The first contract should be (union odd? false?). Oops. Also, I should
> have mentioned that eta-expansion isn't an option, because the
> contracts aren't necessarily predicates but possibly higher order
> contract values.
>
> Maybe the easiest solution would be a library function for converting
> a contract to a predicate so that it can be eta-
How do you get
(letrec ([x (value-constructor1 ... x ...)]
[y (value-constructor2 ... x ...)])
...)
to work?