D 2.0
About Japanese Translation

Last update Thu Oct 28 17:54:33 2010

std.functional

他の関数を操作する関数群

Source:
std/functional.d

License:
Boost License 1.0

Authors:
Andrei Alexandrescu

template unaryFun(alias comp,bool byRef = false)
式を文字列表現した物を、一引数関数に変換します。 文字列表現では、引数名として a を使用します。

Example:
alias unaryFun!("(a & 1) == 0") isEven;
assert(isEven(2) && !isEven(1));


template binaryFun(alias comp)
式を文字列表現した物を、二引数述語関数に変換します。 文字列表現では、引数名として ab を使用します。

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"));

template not(alias pred)
述語 pred の否定バージョンを作ります。

Example:
string a = "   Hello, world!";
assert(find!(not!isspace)(a) == "Hello, world!");

template curry(alias fun,alias arg)
fun をカリー化して、指定された値に第一引数を束縛する関数にします。

Example:
int fun(int a, int b) { return a + b; }
alias curry!(fun, 5) fun5;
assert(fun5(6) == 11);
ほとんどの場合、curry結果の関数は値として変数に代入するよりも、 aliasを使って名前をつけます。alias を使うことで、テンプレート関数を、 特定の型に固定することなくカリー化できます。

template adjoin(F...) if (F.length)
複数の関数を受け取って結合します。結果型は各関数の結果型をそれぞれ格納した 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);


template compose(fun...)
引数として渡された関数 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]);


template pipe(fun...)
関数を順番に接続します。機能的には compose と同じですが、こちらは引数を逆の順序で指定します。 引数の順序が関数の呼び出される順と同じになるので、 場面によってはこちらの方が可読性が上がることがあります。

Example:
// テキストファイル全体を読み込み、
// 空白文字で分割して、
// それぞれをintに変換
int[] a = pipe!(readText, split, map!(to!(int)))("file.txt");