std.functional
他の関数を操作する関数群 Source:std/functional.d
License:
Boost License 1.0 Authors:
Andrei Alexandrescu
- 式を文字列表現した物を、一引数関数に変換します。
文字列表現では、引数名として a を使用します。
Example:
alias unaryFun!("(a & 1) == 0") isEven; assert(isEven(2) && !isEven(1));
- 式を文字列表現した物を、二引数述語関数に変換します。
文字列表現では、引数名として a と b
を使用します。
Example:
alias binaryFun!("a < b") less; assert(less(1, 2) && !less(2, 1)); alias binaryFun!("a > b") greater; assert(!greater("1", "2") && greater("2", "1"));
- 述語 pred の否定バージョンを作ります。
Example:
string a = " Hello, world!"; assert(find!(not!isspace)(a) == "Hello, world!");
- fun をカリー化して、指定された値に第一引数を束縛する関数にします。
Example:
int fun(int a, int b) { return a + b; } alias curry!(fun, 5) fun5; assert(fun5(6) == 11);
ほとんどの場合、curry結果の関数は値として変数に代入するよりも、 aliasを使って名前をつけます。alias を使うことで、テンプレート関数を、 特定の型に固定することなくカリー化できます。 - 複数の関数を受け取って結合します。結果型は各関数の結果型をそれぞれ格納した std.typecons.Tuple になります。結合された関数を呼び出すと、全ての関数の返値を並べたタプルを返します。
Example:
static bool f1(int a) { return a != 0; } static int f2(int a) { return a / 2; } auto x = adjoin!(f1, f2)(5); assert(is(typeof(x) == Tuple!(bool, int))); assert(x[0] == true && x[1] == 2);
- 引数として渡された関数 fun[0], fun[1], ... を合成して、
fun[0](fun[1](...(x)))... を返すような関数 f(x) を返します。
それぞれの引数は、普通の関数、delegate、または文字列で指定できます。
Example:
// まず文字列を空白文字で分割して、 // それぞれをintに変換 assert(compose!(map!(to!(int)), split)("1 2 3") == [1, 2, 3]);
- 関数を順番に接続します。機能的には compose と同じですが、こちらは引数を逆の順序で指定します。
引数の順序が関数の呼び出される順と同じになるので、
場面によってはこちらの方が可読性が上がることがあります。
Example:
// テキストファイル全体を読み込み、 // 空白文字で分割して、 // それぞれをintに変換 int[] a = pipe!(readText, split, map!(to!(int)))("file.txt");