PHP に array_reduce という関数が用意されていたので喜び勇んで使ってみたんだけど実に興味深い仕様だったのでここに記しておきたい。 array_reduce は関数型言語でいう reduce か fold に相当する関数だ。例を挙げると、 <?php function conc($acc, $x) { return $acc . $x; } echo array_reduce(array("a", "b", "c"), "conc"); ?> この結果は abc となる。 別にコールバック関数名を文字列で与えるのが気持ち悪いとかいう話ではない。 次に、array_reduce は第3引数に初期値を与えることができて、それを与えるとコールバック関数が最初に呼ばれるときの第1引数になる(fold になる)。 ではこれはどうなるだろうか。 <?php function conc($