#面白そうなので計測してみよう
#すべて空白だとreverseは不利じゃないかなあ
#ところでこの関数chopというよりはrstripという名前がいい気がする
#dropWhileが重くなる分、2回目のreverseが軽くなるので、思っているほど不利にはならないと思う。
#計測できた
#gistにまとめよう
#こういう場合のprogressionの使い方がよくわからないのでcriterionをそのまま使いました。 https://gist.github.com/1215660 #空白なしだとreverse圧勝、空白だけだとfoldrが速いですね.
#要素数を減らすとまた傾向が変わります
#ついでにCPS変換してfoldlを使うものものせてあります
#結論はどう読めばいいのでしょうか
#foldr版で go の分岐の書きかたでどのくらい違いがでますか?
#条件分岐がネックなんだやっぱり。空白ばかりだとdropWhileが重くなる分をreverseが軽くなることでは吸収できないんだなぁ。
#分岐の書き方はnullをつかうのでしたっけ?
#nullで計測中
#isSpace を先につかった方がすこし稼げるかもしれません。が、その辺もふくめて書きかたのちがいでどの程度差がでるかなと。。。
#3通りで計測中です。isSpaceを前に持ってこないと変わらなそうな気がしますね。Coreを見てみないとわかりませんが。
#nullよりパターンマッチの方が速いかも(計測せず憶測でものいってます :p)
#isSpaceを前に持ってきた方が速く28msec -> 23msec、nullとパターンマッチは変化なしでした。
#ifdef で区切るんですよ。 > progression
#一度の実行で、各benchを比較する方法があるといいなあと思ったのです。> progression
#Coreを見たらnullもパターンマッチも同じコードでした
#UnfoldingDoneにnullって出ているのでインライン化されているようです
#なるほど。
#末尾にちょこっとだけスペースがある文字列に対して実験するとどうなりますか?
#cairoのassertionに失敗してcriterionがこける。。。計測中PCがまともに使えないのがあれなので、追加計測はまたあとでにします。すみません。さっきのgistに最新のコードを貼り付けておきました。
#haskell-cafe でも聞いてみます。
#isSpaceを前に持ってきたfoldrが一番速いかも
#先ほどこけた計測ではfoldrは通過してて、これはダントツに速い
#ただし入力によりそうだよなあ
#再計測してみよう。
##foldr + isSpace前がreverseより速い。reverse版でdropWhileの及ばない末尾以外のところで空白が多いと遅くなりそうだな。
#つづきはまた後で.
#@nobsun @kazu_yamamoto 新しい結果貼っておきました。 http://t.co/feJcCdT