On Thursday, 17 September 2015 at 21:27:31 UTC, jmh530 wrote:


There's probably a way to clean this up better, but this is what I was talking about.

import std.algorithm : sum;
import std.stdio : writeln;
import std.traits : isNumeric;

auto test(T)(T x, bool sample=true)
{
        auto sum_x = sum(x);
        if (sample)
                return sum_x;
        else
                return sum_x / 2;
}

auto test(T, V ...)(T x, V y)
{
        static if (y.length)
        {
                static if (y.length == 2 &&
                           is(typeof(y[0]) == bool) &&
                           isNumeric!(typeof(y[1])))
                {
                        auto sum_x = sum(x, y[1]);
                        if (y[0])
                                return sum_x;
                        else
                                return sum_x / 2;
                }
        }
}

void main()
{
        int[] x = [10, 5, 15, 20, 30];
        writeln(test(x, true));
        writeln(test(x, false));
        float seed = 1;
        writeln(test(x, true, seed));
        writeln(test(x, false, seed));
}

Reply via email to