On 03/01/2011 07:58 AM, Peter Lundgren wrote:
I'm trying to use mixins to generate an array of numbers that are coprime to a
statically known value. I've tried the following, but I receive the error:

Error: to(i) ~ ", " cannot be interpreted at compile time


string makePossibleAValues(string name, byte m) {
        string result = "immutable byte[] "~name~" = [";
        foreach (i; 0 .. m) {
                if (coprime(i, m)) {
                        result ~= to!string(i) ~ ", ";
                }
        }
        return result ~ "];";
}

bool coprime(ulong a, ulong b) {
        return gcd(a, b) == 1;
}

ulong gcd(ulong a, ulong b) {
        while (b) {
                auto t = b;
                b = a % b;
                a = t;
        }
        return a;
}

mixin(makePossibleAValues("aValues", 26));


makePossibleAValues("aValues", 26) produces the correct result, "immutable
byte[] aValues = [1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25, ];", at runtime
and I know to!string can be used in mixins. Any idea as to why this particular
code is having trouble with to!string?

Not sure because I never use string mixins, but I guess the answer is precisely what the error says. Why don't you believe it? makePossibleAValues() obviously returns a runtime value, so mixin() cannot evaluate it, I guess.

Denis
--
_________________
vita es estrany
spir.wikidot.com

Reply via email to