Strange output
Daemon
daemon at yahoo.com
Fri Jun 7 12:54:22 PDT 2013
On Friday, 7 June 2013 at 19:47:39 UTC, develop32 wrote:
> On Friday, 7 June 2013 at 19:10:54 UTC, Daemon wrote:
>> The following program is supposed to print out only numbers
>> that are less than 5, yet the number 63 gets printed.
>>
>> module main;
>>
>> import std.stdio;
>> import std.conv;
>>
>> int main(string[] argv)
>> {
>> auto de = find!(delegate(a) { return a < 5; })([10, 11, 15,
>> 16, 27, 20, 2, -4, -17, 8, 64, 6]);
>>
>> foreach (int b; de[0 .. $])
>> {
>> writeln(b);
>> }
>>
>> readln();
>>
>> return 0;
>> }
>>
>> T[] find(alias pred, T)(T[] input)
>> if (is(typeof(pred(input[0])) == bool))
>> {
>> for (; input.length > 0; input = input[1 .. $])
>> {
>> if (pred(input[0]))
>> {
>> break;
>> }
>> }
>> return input;
>> }
>>
>> I realize it's extremely improbable that I've discovered a
>> bug, so what exactly could I be doing wrong? Why is the output:
>>
>> 2
>> -4
>> -17
>> 8
>> 63
>> 6
>>
>> I'm probably missing something obvious. If the input is just
>> [63], then nothing gets printed out.
>
> It looks like your find function just stops at the first item
> that is less than five (which is two) and returns a range
> consisting of all the following items.
> If you'll look closer, your output is just all items after and
> including 2.
I totally misunderstood the for loop before, I feel ashamed.
Thanks a lot, haha
More information about the Digitalmars-d-learn
mailing list