On Wednesday, 13 August 2014 at 14:45:43 UTC, Jonathan M Davis via Digitalmars-d-learn wrote:
They're called find and until. You just have to give them the opposite
predicate that you'd give a function called dropIf or takeIf.

Ok, thx.

As an exercise I tried

auto dropWhile(R, E)(R range, E element) if (isInputRange!R &&
is(ElementType!R == E))
{
    import std.algorithm: find;
    return range.find(a => a != element);
}

unittest { dln([1, 2, 3].dropWhile(1)); }

but it errors as

algorithm_ex.d(1452,22): Error: template std.algorithm.find cannot deduce function from argument types !()(int[], void), candidates are: /home/per/opt/x86_64-unknown-linux-gnu/dmd/linux/bin64/src/phobos/std/algorithm.d(4261,12): std.algorithm.find(alias pred = "a == b", InputRange, Element)(InputRange haystack, Element needle) if (isInputRange!InputRange && is(typeof(binaryFun!pred(haystack.front, needle)) : bool)) /home/per/opt/x86_64-unknown-linux-gnu/dmd/linux/bin64/src/phobos/std/algorithm.d(4541,4): std.algorithm.find(alias pred = "a == b", R1, R2)(R1 haystack, R2 needle) if (isForwardRange!R1 && isForwardRange!R2 && is(typeof(binaryFun!pred(haystack.front, needle.front)) : bool) && !isRandomAccessRange!R1) /home/per/opt/x86_64-unknown-linux-gnu/dmd/linux/bin64/src/phobos/std/algorithm.d(4589,4): std.algorithm.find(alias pred = "a == b", R1, R2)(R1 haystack, R2 needle) if (isRandomAccessRange!R1 && isBidirectionalRange!R2 && is(typeof(binaryFun!pred(haystack.front, needle.front)) : bool)) /home/per/opt/x86_64-unknown-linux-gnu/dmd/linux/bin64/src/phobos/std/algorithm.d(4661,4): std.algorithm.find(alias pred = "a == b", R1, R2)(R1 haystack, R2 needle) if (isRandomAccessRange!R1 && isForwardRange!R2 && !isBidirectionalRange!R2 && is(typeof(binaryFun!pred(haystack.front, needle.front)) : bool)) /home/per/opt/x86_64-unknown-linux-gnu/dmd/linux/bin64/src/phobos/std/algorithm.d(4887,23): std.algorithm.find(alias pred = "a == b", Range, Ranges...)(Range haystack, Ranges needles) if (Ranges.length > 1 && is(typeof(startsWith!pred(haystack, needles))))
algorithm_ex.d(1452,22):        ... (2 more, -v to show) ...
algorithm_ex.d(1456,35): Error: template instance algorithm_ex.dropWhile!(int[], int) error instantiating /home/per/Work/justd/msgpack.d(4614,25): Warning: calling msgpack.pack!(false, string).pack without side effects discards return value of type ubyte[], prepend a cast(void) if intentional /home/per/Work/justd/msgpack.d(4614,25): Warning: calling msgpack.pack!(false, string).pack without side effects discards return value of type ubyte[], prepend a cast(void) if intentional

What have I done wrong?

Reply via email to