barutanGNE's blog

kindleで読んだ本の感想や、プログラミングに関する記事など。

JavaScriptでmap,filter,reduceなど

頑張ってHaskell, Pythonとの比較もしてみる。ちなみに自分は、HaskellPythonJavaScriptと全てあまりレベルが高くないので、もっと簡潔に書ける可能性大いにあり。それほど大した例じゃないけれども。
ただ、出発点が
Haskellで簡潔に書けるあれは、JavaScript(Python)だとどう書けるんだ?」
という疑問なので、Haskell版は大丈夫なはず。

map

1から7の整数のそれぞれを二乗する。

Haskell   : map (^2) [1..7]
Python    : map( (lambda x: x**2), range(1,8) )
JavaScript: [1,2,3,4,5,6,7].map(Math.sqrt);

JavaScriptには、range関数ってないのかな?
D3.jsにはあったの確認してるけど。

filter

1から7の整数のうち、偶数を抜き出す

Haskell    : filter (\x -> x `mod` 2 == 0) [1..7]
Python     : filter ( (lambda x: x % 2 == 0) , range(1,8) )
JavaScript : a = [1,2,3,4,5,6,7].filter( function(x){
                            return ! (x % 2);
                       });

reduce

1から7の整数の和を求める

Haskell : foldr1 (+) [1..7]
Python : reduce ( (lambda x, y: x+y), range(1,8))
JavaScript: [1,2,3,4,5,6,7].reduce( function(x,y){
                     return x+y;
                 });

本当は、HaskellPythonではsumが使える。
JavaScriptはどうなんだろう?

感想

JavaScriptは、即時関数を多用する割に、記法が冗長で困る。
HaxeCoffeeScriptDartなどのaltJSでは改善されてるんだろうか?

読みたい本

JavaScriptで学ぶ関数型プログラミング

JavaScriptで学ぶ関数型プログラミング