Full closures for D
outersky
outersky at gmail.com
Tue Nov 6 19:10:03 PST 2007
Maybe the two inner variables can be omitted as :
C delegate(B) curry(A, C, B...)(C delegate(A, B) dg_, A a_) {
C add(B b) {
return dg_(a_, b);
};
return &add;
}
Witold Baryluk 写道:
> Dnia Fri, 02 Nov 2007 14:03:59 -0700
> Walter Bright <newshound1 at digitalmars.com> napisał/a:
>
>> D 2.007 brings full closures to D. I was tired of D being denigrated
>> for not having "real" closures.
>>
>
> Simpler curring?
>
> // not tested
> C delegate(B) curry(A, C, B...)(C delegate(A, B) dg_, A a_) {
> auto a = a_;
> auto dg = dg_;
> C add(B b) {
> return dg(a, b);
> }
> return &add;
> }
>
>
> instand of:
>
> // Old code: http://www.digitalmars.com/d/template.html
>
> R delegate(U) Curry(R, A, U...)(R delegate(A, U) dg, A arg)
> {
> struct Foo
> {
> typeof(dg) dg_m;
> typeof(arg) arg_m;
>
> R bar(U u)
> {
> return dg_m(arg_m, u);
> }
> }
>
> Foo* f = new Foo;
> f.dg_m = dg;
> f.arg_m = arg;
> return &f.bar;
> }
>
>
>
> Also other functional stuff like infinite lazy lists or monads can be
> done much much simpler now :)
>
More information about the Digitalmars-d
mailing list