No static fold in phobos ?
Meta via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Nov 27 15:57:41 PST 2015
On Friday, 27 November 2015 at 20:57:44 UTC, userabcABC123 wrote:
> That would work on an AliasSeq ?
> I'm surprised not to find one:
>
> eg:
>
> ~~~~~~~
> enum seq = AliasSeq!("aa", "bb");
> enum val = staticFold!((a,b)=>a~b, seq);
> static assert(val == "aabb");
> ~~~~~~~
>
> it works with foreach or a eponymous template that consumes the
> sequence , but as said where is it in phobos ?
There's not much sense in a staticFold template that takes a
function literal, as you can use regular functions in D at
compile time. However, you need to use template "functions" for
some things, so here's a simple way to do that:
template staticFold(alias f, List...)
if (List.length > 1)
{
static if (List.length == 2)
{
alias staticFold = f!(List[0], List[1]);
}
else
{
alias staticFold = staticFold!(f, f!(List[0], List[1]),
List[2..$]);
}
}
enum cat(alias l, alias r) = l ~ r;
void main()
{
assert(staticFold!(cat, [0], [1]) == [0, 1]);
assert(staticFold!(cat, [0], [1], [2]) == [0, 1, 2]);
assert(staticFold!(cat, [0], [1], [2], [3]) == [0, 1, 2, 3]);
assert(staticFold!(cat, [0], 1, 2, 3, 4) == [0, 1, 2, 3, 4]);
}
More information about the Digitalmars-d-learn
mailing list