import std.stdio, std.algorithm, std.range;
void main()
{
writeln( find([5, 1, 2, 3, 4, 5, 1], 5) );
writeln( find(retro([5, 1, 2, 3, 4, 5, 1]), 5) );
}
Output:
[5, 1, 2, 3, 4, 5, 1]
[5, 4, 3, 2, 1, 5]
The docs for find are:
"returns : haystack advanced such that binaryFun!pred(haystack.front,
needle) is true "
"To find the last occurence of needle in haystack, call
find(retro(haystack), needle). "
To me, if I was looking for the last element in a range I would expect
to get a range with the found element followed by an elements after it.
Obviously retro reverses the range (it just hard-wires front=back,
back=front for those not in the know), so this code is correct.
Still, I would expect that finding a last element in this range:
[5, 1, 2, 3, 4, 5, 1]
would return the range:
[5, 1]
and not:
[5, 4, 3, 2, 1, 5]
Isn't that what most people would want when they're looking for the
last matching element?