commonLength

"Nordlöw" via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jan 15 05:13:56 PST 2015


On Thursday, 15 January 2015 at 13:01:50 UTC, Nordlöw wrote:
> I want a variant of commonPrefix(a, b) at
>
>     http://dlang.org/phobos/std_algorithm.html#commonPrefix
>
> that only counts returns the length of commonPrefix(a, b)
>
> Is commonPrefix lazy enough to make
>
>     commonPrefix(a, b).count
>
> as fast as
>
>     zip(a, b).count!(ab => ab[0] == ab[1])
>
> ?

I just discovered that zip has StoppingPolicy so why does

auto commonPrefixLength(R...)(R ranges) if (ranges.length == 2)
{
     import std.range: zip;
     return zip!((a, b) => a[0] != b[1])(ranges);
}

unittest
{
     assert(commonPrefixLength([1, 2, 3, 10],
                               [1, 2, 4, 10]) == 2);
}

error as

algorithm_ex.d(1709,40): Error: template std.range.zip cannot 
deduce function from argument types !((a, b) => a[0] != 
b[1])(int[], int[]), candidates are:
std/range/package.d(3247,6):        
std.range.zip(Ranges...)(Ranges ranges) if (Ranges.length && 
allSatisfy!(isInputRange, Ranges))
std/range/package.d(3265,6):        
std.range.zip(Ranges...)(StoppingPolicy sp, Ranges ranges) if 
(Ranges.length && allSatisfy!(isInputRange, Ranges))
algorithm_ex.d(1714,30): Error: template instance 
algorithm_ex.commonPrefixLength!(int[], int[]) error instantiating


More information about the Digitalmars-d-learn mailing list