Boost logo

Boost :

Subject: Re: [boost] De Bruijn Bind (alternate bind syntax) Interest?
From: David Sankel (camior_at_[hidden])
Date: 2010-09-04 14:27:15


On Sat, Sep 4, 2010 at 7:09 AM, Larry Evans <cppljevans_at_[hidden]>wrote:

> On 09/03/10 10:33, David Sankel wrote:
> > On Fri, Sep 3, 2010 at 8:04 AM, Stewart, Robert <Robert.Stewart_at_[hidden]
> >wrote:
> >
> >> Larry Evans wrote:
> >>> On 09/03/10 06:33, Stefan Strasser wrote:
> >>>
> >>> In:
> >>>
> >>> lam<I>
> >>>
> >>> I is arity, not nesting, of the lambda expression:
> >>>
> >>> http://bitbucket.org/camior/de-bruijn-bind/src#cl-45
> >>>
> >>> IOW:
> >>>
> >>> \(x1,x2,x3).x1+x2+x3
> >>> =>
> >>> lam<3>(arg<0,1>+arg<0,2>+arg<0,3>)
> >>
> >> lam<3>(_0_1 + _0_2 + _0_3) (using zero-based indices)
> >>
> >> So much more readable, don't you think? ;-)
> >>
> >
> > Yes. I've added the following syntactic enhancements to the code (and
> > updated README) at http://bitbucket.org/camior/de-bruijn-bind
> >
> > - abs -> lam
> > - var -> arg
> > - some _x_y shorthands for arg<x,y>()
> >
>
> Since most of the time the user will be referring to the
> arg<0,I>,

This would be arg<1,1> in the new notation.

> why not switch args to arg to allow defaulting
> the 2nd arg for the common case? IOW, something like:
>
> template
> < unsigned ArgIndex
> , unsigned NestingLevel=0
> >
> struct arg
> ;
>
> instead of:
>
> template
> < unsigned NestingLevel
> , unsigned ArgIndex
> >
> struct arg
> ;
>
> This would allow:
>
> typedef arg<1> _1;
> typedef arg<2> _2;
> ...
>

We could always do

typedef arg<1,1> _1; //etc.

So I don't see the necessity of the default arg template argument. If
someone wants to go beyond the _a{_b} syntax sugar then they will likely not
take advantage of the template arguments.

I liked the idea of _x sugar in its familiarity to bind users, but given the
new recursion functionality I prefer _x as sugar to refer to the function
created by the xth nested lambda.

-- 
David Sankel
Sankel Software
www.sankelsoftware.com
585 617 4748 (Office)

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk