Haskellで多重forループを書く
ArrowとかApplicativeとかTraversableとかいろいろ使ってコードを書いてみたいなということで、どう書く?orgに登録しました。
とりあえずforループで4つほど書いて見ました。おもしろかったのは、ピラミッドを作ると逆順になるあみだくじ。自然に2重ループが書けるなぁという、他の言語からすれば当然のことがすごく新鮮。
よくある三角形を表示するサンプルコードを載せます。
import Data.Traversable triangle :: Int -> IO () triangle n = for [1..n] (\y -> for [1..n] (\x -> if y >= x then putChar '*' else putChar ' ' ) >> putChar '\n' ) >> return ()
*Main> pyramid 5 * ** *** **** *****
これはTraversable.forの代わりに、Control.Monad.forMを使っても同じです。
ArrowやApplicativeはもっと極端に記法が変わるので、こっちもいろいろ書いて見ようと思います。