D言語のライブラリの中でも一際変態な輝いているアルゴリズム群がRangeの概念をサポートした.
http://www.digitalmars.com/d/2.0/phobos/std_algorithm.html
配列以外のRangeには何があるのかな?
おさらい
- count
int[] arr = [ 1, 2, 4, 3, 2, 5, 3, 2, 4 ]; assert(count(arr, 2) == 3); assert(count!("a > b")(arr, 2) == 5); // 文字列mixinは何でもありだ
- map
int[] arr = [ 1, 2, 3, 4 ]; auto squares = map!("a * a")(arr); assert(equal(squares, [1, 4, 9, 16][]));
- reduce
int[] arr1 = [1,2,3,4,5]; int res1 = reduce!("a + (b * b)")(0, arr1); assert(res1 == 55); string[] arr2 = ["1", "2", "3", "4"]; string res2 = reduce!("a ~ ('[' ~ b ~ ']')")("", arr2); assert(res2 == "[1][2][3][4]");