|
D Paste by downs
Description: memoize
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | gentoo-pc ~/d $ cat test32.d && echo "----" && rebuild test32.d && ./test 32 module test32; import std.stdio, tools.base; C delegate() __memoize(C)(C delegate() what) { return stuple(what, Init!(typeof(what())), false) /apply/ (C delegate() what, ref C temp, ref bool set) { if (!set) { temp = what(); set = true; } return temp; }; } C delegate() _memoize(C)(C delegate()[] what...) { assert(what.length == 1); return __memoize!(C)(what[0]); } C delegate() memoize(C)(lazy C what) { return _memoize!(C)(what); } int test() { writefln("Test!"); return 5; } void main() { auto dg = memoize(test); writefln(dg(), "-", dg(), "-", dg()); } ---- Test! 5-5-5 |