畳み込み関数のメモ
Rubyはinject,Schemeはreduceまたはapply。
1から10まで足してみる。
Scheme(Gauche)
reduceで
(use srfi-1) ; iota用 (reduce + 0 (iota 10 1)) ; 55
srfi-1のfoldを使う。
(fold + 0 (iota 10 1)) 55
consと一緒に使うと逆順になっちゃうので、個人的には、fold-rightがお気に入り。
JavaScript
1.8からreduceが!
Core JavaScript 1.5 Reference:Objects:Array:reduce - MDCのCompatibilityをコピッペして
[1, 2, 3].reduce(function(a, b){ return a + b; }); // 6
おぉぉぉぉぉぉぉ。
Perl
それなら,Perlもいっとこう。
use List::Util; List::Util::reduce{$a + $b} 1..10 # 55
$a,$bは何処からやってきたんだ・・・perl全然わかんねぇ・・・。
参考
- ピッケル本2nd P45 4.2 ブロックとイテレーター
- Scheme 入門 8. 高階関数
- リスト系高階関数色々。熟読しよう。
- Core JavaScript 1.5 Reference:Global Objects:Array - MDC
- JavaScriptも楽しそう。
- 2.1 組み込み関数
- reduceらへん。lambdaのスペルミスがある。
- List::Util Perl 標準の配列操作ライブラリ
- IBM 境界を越える: Haskell を使った関数型プログラミング - Japan