Compile time function execution...
Bill Baxter
dnewsgroup at billbaxter.com
Thu Feb 15 17:35:46 PST 2007
Walter Bright wrote:
> ... is now in DMD 1.006. For example:
>
>> -------------------------------------------
>> import std.stdio;
>>
>> real sqrt(real x)
>> {
>> real root = x / 2;
>> for (int ntries = 0; ntries < 5; ntries++)
>> {
>> if (root * root - x == 0)
>> break;
>> root = (root + x / root) / 2;
>> }
>> return root;
>> }
>>
>> void main()
>> {
>> static x = sqrt(10); // woo-hoo! set to 3.16228 at compile time!
>> writefln("%s, %s", x, sqrt(10)); // this sqrt(10) runs at run time
>> }
>> ------------------------------------------
>
> This should obsolete using templates to compute values at compile time.
Any chance that concatenation onto a variable will be supported?
I'd like to write this:
char[] NReps(char[] x, int n)
{
char[] ret = "";
for(int i=0; i<n; i++) { ret ~= x; }
return ret;
}
But that doesn't work. The recursive version does, though:
char[] NReps2(char[] x, int n, char[] acc="")
{
if (n<=0) return acc;
return NReps2(x, n-1, acc~x);
}
--bb
More information about the Digitalmars-d
mailing list