Lambda functions in D
Dennis Ritchie via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat May 9 15:19:27 PDT 2015
On Saturday, 9 May 2015 at 21:48:05 UTC, Timon Gehr wrote:
> Well, it is much slower due to all the allocated closures, owed
> to the fact that the implementations of 'fix' on that page are
> expected to mirror a particular famous implementation in
> untyped lambda calculus.
>
> In case you have a use for 'fix', a more efficient
> implementation might be:
>
> auto fix(S,T...)(S delegate(T) delegate (S delegate(T)) f){
> S delegate(T) g=(T a){ assert(0,"f is too eager."); };
> return g=f((T a)=>g(a));
> }
>
> (In particular, this will only allocate two closures for the
> plumbing instead of a number of them linear in the number of
> recursive invocations.)
>
>
>> Even something like Common Lisp.
>
> (Be aware that Common Lisp implementations typically have
> better garbage collectors than what is available for D.)
Maybe in the future, that D will be added to optimize tail
recursion delegates?
And why garbage collectors in Lisp is better?
More information about the Digitalmars-d-learn
mailing list