D Paste by downs
Description: memoize
Hide line numbers

Create new paste
Post a reply
View replies

Paste:
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

Replies:
No replies posted yet