|
|
||
覚え書きです。
リストの全ての要素に対して関数fを適用には、map を使いますが、
逆(?)に、リスト内の全ての要素(関数)に対して特定の値を入力する場合にも、mapが使える。
ただし、mapの第一変数には、関数が必要なので直接特定の値を置くことができない。
そんなとき、($)が使える。ちゃんとドキュメントに書いてある。
map f [0..9] -- 普通のmapの使い方 map (\f -> f x) [f1, f2] -- 丁寧に関数として書くとこうなる map (\f -> f $ x) [f1, f2] map (\f -> ($ x) f) [f1, f2] map ( ($ x) ) [f1, f2] map ($ x) [f1, f2] -- ここまで書き下せる
ProjectEulerで悩んでいて、どのくらいの時間がかかっているのかの時間計測をしようと思ったのだが、Windowsにはtimeコマンドのような計測コマンドはあまり見つからないし、自分で時間の計測を書くのも億劫だなぁと思っていたら、criterionというのがあったようなので使ってみた。
ただ、「criterionでは、複数のペンチを比較するような用途には使えないよ」ということだったのだが、ヘルプを見てると、どうやら、詳細レポートページの出力が可能になっている模様。
main = do defaultMain $ map (\n -> bench (show n) $ nf hoge n) [50, 100, 200, 500, 1000, 2000]
> main -o test.htm
見事なまでの最悪の計算量・・・