SORU
2 EYLÜL 2014, Salı


C 14: Lambda-Lambda

Nasıl yinelemeli lambda çağrı sonrasında sona erer/sonlanır ?

#include <cstdio>

auto terminal = [](auto term)            // <---------   
{                                        //           |
    return [=] (auto func)               //           |  ???
    {                                    //           |
        return terminal(func(term));     // >--------- 
    };
};


auto main() -> int
{
    auto hello =[](auto s){ fprintf(s,"Hello\n"); return s; };
    auto world =[](auto s){ fprintf(s,"World\n"); return s; };


    terminal(stdout)
            (hello)
            (world) ;

    return 0;

}

Burada neyi kaçırıyorum ?

Running code

CEVAP
2 EYLÜL 2014, Salı


Özyinelemeli bir işlev çağrısı değil, bak bunu adım adım:

  1. terminal(stdout) - Bu sadece stdout esir olan bir lambda verir
  2. 1 sonucu. lambda ile sonucu sadece 1 olarak bir lambda döndürür. terminal(), geçirildi lambda yürütenhello, (func(term)) denir
  3. 2 sonucu. lambda denir 2, dönüş değeri atılır bu sefer aynı yapan world,...

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 3DS Max Tutorials

    3DS Max Tuto

    4 AĞUSTOS 2013
  • jedimasterkyle

    jedimasterky

    11 ŞUBAT 2006
  • Simon Hayter

    Simon Hayter

    20 HAZİRAN 2010