xxxxxxxxxx
import std.range;
import std.algorithm;
import std.stdio;
import std.typecons;
auto splitBy(alias F, R)(R range)
if (isInputRange!R)
{
import std.functional : binaryFun;
alias fun = binaryFun!F;
return range
.map!(x => tuple(x, true))
.cumulativeFold!((a,b) => tuple(b[0], !((!fun(a[0],b[0])) ^ a[1])))
.chunkBy!((a,b) => a[1] == b[1])
.map!(x => x.map!(y => y[0]));
}
void main()
{
[1,2,3,5,10,11,12,13,20,21,100].splitBy!"a+1 != b"().writeln;
}