Lazy functions, lazy arrays
Dennis Ritchie via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Mar 20 09:01:50 PDT 2015
On Friday, 20 March 2015 at 14:27:06 UTC, John Colvin wrote:
> I made a mistake about the static variable and thread-local
> storage.
>
> immutable(int)[] factorials()() @property
> {
> static immutable int[N] results = memoizeFactorials(N);
> return results[];
> }
>
> is the correct way to do it if you have to.
>
> Still, it's totally not worth doing for such a short array.
Thank you, but I can not figure out how I do this:
import std.stdio;
enum N = 12;
immutable(int)[] factorials()() @property
{
static immutable int[N] results = memoizeFactorials(N);
return results[];
}
int[] memoizeFactorials(int n)
{
if (!__ctfe)
// Make sure that this function is never called at run
time
assert(false);
int[] result = new int[n];
result[0] = 1;
foreach (i; 1 .. n)
result[i] = result[i - 1] * i;
return result;
}
void main()
{
bool flag;
if (flag) {
factorials();
writeln(factorials[10]); // 3628800
}
else
writeln(factorials[10]); // range violation(35)
}
More information about the Digitalmars-d-learn
mailing list