On Saturday, 27 April 2024 at 11:55:58 UTC, Basile B. wrote:
Here's [STYX](https://gitlab.com/styx-lang/styx) solution:


    function sum[T,U](U u): u32

I think you meant `: T`.

    {
        var T result;
        foreach const e in u do
            if echo(is, e, T) do
                result += e;
            else do
                result += sum![T](e);
        return result;
    }

    function main(): s32
    {
        assert((1, 2, 3, [1, 3], 5).sum![u32]() == 15);
        return 0;
    }

Mostly equivalent D:
```d
R sum(R = long, T)(T v)
{
    R r;
    foreach (e; v)
    {
        static if (is(typeof(e) == int))
            r += e;
        else
            r += sum!R(e);
    }
    return r;
}

void main()
{
    import std;
    assert(tuple(1, 2, 3, [1, 3], 5).sum == 15);
}
```

Reply via email to