About a minute ago, Carl Eastlund wrote: > On Thu, Nov 11, 2010 at 1:14 PM, Eli Barzilay <e...@barzilay.org> wrote: > >> I got inspired by the #:when form in `for' loops that flattens > >> nesting, and wrote a `cond*' macro that allows this instead: > >> > >> (cond* [... some stuff ...] > >> #:with (define m ...) > >> [(... something about m ...) (... something using m ...)] > >> ... more things referring to m ...) > >> > >> It's more general, since it doesn't require encoding the condition > >> you want to test as a truthiness value. Also, the `define' doesn't > >> have to be a `define' - it can be any legal expression. > > > > So, you advocate eliminating `member' etc for predicates (why I > > started with saying that this is much stickier than just adding a > > `member?'). So we started with > > > > (cdr (assq x alist)) > > > > then Scheme upgraded this to > > > > (cond [(assq x alist) => cdr] > > [else #f]) > > > > and you suggest continuing with > > > > (cond #:with (define p (assq x alist)) > > [(pair? p) (cdr p)] > > [else #f]) > > > > or, with more well-behaved proper sub lists > > > > (cond #:with (define p (assq x alist)) > > [(not (eq? p #f)) (cadr p)] > > [else #f]) > > > > (Yes, you can still use `pair?' but that would be ugly for the same > > reason.) > > > > I also wonder how many newbies (or people that just want to type less) > > will fall into traps like > > > > (if (member? x l) > > (+ 1 (find x l)) > > 0) > > > > My loud "ugh" should be expected now. > > (dict-ref x alist)
The above is "an example", substitute appropriately. -- ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay: http://barzilay.org/ Maze is Life! _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users