/ / メモ
2009-06-03

lazyとdelegateで混乱した。
delegateで書くと、

auto _if = (bool delegate() _cond,int delegate() _then,int delegate() _else){
    return _cond()?_then():_else();
};

int delegate(int) fib;
fib = (int n){
    return _if({return n <= 2;},
                    {return 1;},
                    {return fib(n-1) + fib(n-2);});
};

lazyで書くと、

auto _if = (lazy bool _cond,lazy int _then,lazy int _else){
    return _cond?_then:_else;
};

int delegate(lazy int) fib;
fib = (lazy int n){
    return _if(n <= 2,
               1,
               fib(n-1) + fib(n-2));
};

遅延評価ができると無限リストが作れるらしい。
Dでは、どう書くだろう。

トラックバック http://mikanya.dip.jp/memo/2009-06-03-1