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