|
Boost : |
Subject: Re: [boost] De Bruijn Bind (alternate bind syntax) Interest?
From: David Sankel (camior_at_[hidden])
Date: 2010-09-20 11:43:38
On Mon, Sep 20, 2010 at 10:57 AM, David Sankel <camior_at_[hidden]> wrote:
> On Sun, Sep 19, 2010 at 2:51 PM, Larry Evans <cppljevans_at_[hidden]>wrote:
>
>> On 09/02/10 10:57, David Sankel wrote:
>> > Hello all,
>> >
>> > I've been working on an alternate bind syntax based on De Bruijn
>> indices[1].
>> > The syntax is very simple, yet the terms are very powerful.
>>
>> David,
>>
>> I tried the problem on:
>>
>> http://en.wikipedia.org/wiki/De_Bruijn_index
>>
>> however, I'm getting the compile errors shown in the attachment which
>> also shows the source via a cat command.
>>
>> Any ideas what may be wrong?
>>
>
> Larry,
>
> Looks like you passed a template function, z, to another function. <snip>
> Looks like there are more issues too. I'll continue digging.
>
The example,
(λ λ z 2 (λ 1 3)) (λ w 1)
is a tough one to comprehend, but certainly implementable:
auto t = lam<1>( lam<1>( app( z2
, _2_1
, lam<1>( app( _1_1
, _3_1
)
)
)
)
)
( lam<1>( app( w, _1_1 ) )
);
int result = t("ignored");
If I implemented the "To make our eager evaluator consistent" TODO, I could
use the app(a,b) syntax instead of the a(b) syntax for the final
application. This gives the expression more consistency:
auto t = app( lam<1>( lam<1>( app( z2
, _2_1
, lam<1>( app( _1_1
, _3_1
)
)
)
)
)
, lam<1>( app( w, _1_1 ) )
);
The z function in the example is a weird beast. I gave it a trivial
implementation:
struct Z2
{
typedef int result_type;
template < typename F, typename G >
int operator()( F f
, G g
) const
{
return 3;
};
} const z2 = Z2();
To make a non-trivial implementation of z, you could use the fact that its
first argument has kind * â *. That is, its first argument must be a
function from something to something. Its second argument has kind ((* â *)
â *) â *). That is, its second argument must be a function that takes in a
function as its first parameter that takes in a function as its first
parameter. A fun mind bender :).
David
-- 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