[Issue 4705] Redesign of std.algorithm.max()/min() + mins()/maxs()
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Sun Apr 14 14:23:41 PDT 2013
    
    
  
http://d.puremagic.com/issues/show_bug.cgi?id=4705
--- Comment #16 from bearophile_hugs at eml.cc 2013-04-14 14:23:35 PDT ---
I still think mins()/maxs() are useful. But years after the original proposal
an API change in max/min is now problematic (unless you want to introduce
maximum/minimum functions). So I propose a small change in my original request.
Now I suggest to keep the max/min functions diadic as they are now, and add the
optional 'key' function. This is a backwards-compatible change in max/min.
This is the updated example code presented here:
http://d.puremagic.com/issues/show_bug.cgi?id=4705#c5
import std.stdio, std.algorithm, std.range, std.typecons;
auto hailstone(int n) pure nothrow {
    auto result = [n];
    while (n != 1) {
        n = (n & 1) ? (n * 3 + 1) : (n / 2);
        result ~= n;
    }
    return result;
}
void main() {
    iota(1, 1000)
    .map!(i => tuple(i.hailstone.length, i))
    .reduce!max[1]
    .writeln; // 871
}
With the original proposal the main() becomes (with the maximum the code is
very similar):
void main() {
    iota(1, 1000)
    max!(i => i.hailstone.length)
    .writeln;
}
With the reduced proposal the main() becomes:
void main() {
    iota(1, 1000)
    reduce!(max!(i => i.hailstone.length))
    .writeln;
}
-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
    
    
More information about the Digitalmars-d-bugs
mailing list