Boost logo

Boost :

Subject: Re: [boost] De Bruijn Bind (alternate bind syntax) Interest?
From: Larry Evans (cppljevans_at_[hidden])
Date: 2010-09-04 07:09:28


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>, 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;
  ...


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