01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
2009-06-03 Wed
■ 遅延評価でフィボナッチ [D言語]
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では、どう書くだろう。