On 11/27/20 9:01 AM, ddcovery wrote:
On Friday, 27 November 2020 at 16:40:43 UTC, ddcovery wrote:
...
* Can the lambda be transformed to a template (using T instead "int") but avoiding function/return syntax?

This is an example using function

  template qs(T){
    T[] qs( T[] items ){
      return items.length==0
        ? items
        : chain(
          qs(items[1..$].filter!(i=> i<items[0] ).array),
          items[0..1],
          qs(items[1..$].filter!(i=> i >= items[0]).array)
        ).array;
    }
}

I mean... transform this into a lambda expression:

     T[] qs(T)( T[] items ){
       return items.length==0
         ? items
         : chain(
           qs(items[1..$].filter!(i=> i<items[0] ).array),
           items[0..1],
           qs(items[1..$].filter!(i=> i >= items[0]).array)
         ).array;
     }


This has been done with the Y-combinator, where the lambda refers to itself as 'self':


https://github.com/gecko0307/atrium/blob/master/dlib/functional/combinators.d

There has been been other discussions on it on these forums.

Ali


Reply via email to