[racket] Bouncing default value
9 hours ago, Laurent wrote:
> Thank you all for your good and helpful answers. Based on them,
> here is my current solution (without keywords), using macros to ease
> the function definition:
>
> #lang racket
>
> (define default (gensym))
> (define (default? x) (equal? x default))
(Using `eq?' here is a common idiom.)
In any case, the real point here is not the macro -- it's the
existence of a special `none' value that marks an unsupplied value.
It's potentially a convenient thing to have (which I wish for every
time I do that `gensym' dance), but it gets tricky with the fact that
you might want to actually use that value -- same as the undefined
value (which you get from (letrec ([x x]) x)) which could be used for
the same purpose.
(This comes up in other places like struct initialization with
optional fields -- in swindle I used the undefined value for that.
This is done in a similar way to what TR does: a field can have a
guard, but the undefined value is allowed as an exception because of
this kind of use.)
--
((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay:
http://barzilay.org/ Maze is Life!