2006-03-16 [長年日記]

[Haskell] AA折れ線グラフ (2)

foldlで書くときに、出力側のリストに出力する値と、入力側のリストの次の値の処理をするための値を別にできると良いなと思っていたのですが、mapAccumLを使うとできるようです。

というわけで、昨日のconvを変形。

conv :: String -> [(Int, Int)]
conv = snd . mapAccumL f 0
    where
        f :: Int -> Char -> (Int, (Int, Int))
        f n 'R' = (n + 1, (n,      1))
        f n 'F' = (n - 1, (n - 1, -1))
        f n 'C' = (n,     (n,      0))

あまり変わっていないような気がしますが、気分的にはかなりすっきりしました。

本日のツッコミ(全1件) [ツッコミを入れる]
# Yoshikuni Jujo (2014-01-21 02:53)

いいですね。 <br>mapAccumLの使用例がなかなかないなかで、これは非常に良い例ですね。 <br>参考になりました。


トップ «前の日記(2006-03-15) 最新 次の日記(2006-03-17)»