今日はリストを使ってみる。リストを定義し、リストの中身を順に表示するプログラムを作る。Rubyで書くと以下のようなイメージ。
list = [1, 2, 3]
list.each{|v|
puts v
}
さて、Haskellでリストを作るにはRubyと同じく[]
を使う。Haskellにはリストの他にも連想リストや配列といったデータ構造もあるようで紛らわしい。
[1, 2, 3]
このリストの要素に、printを順に適用させたい。最初、調べ始めてmap
を見つけた。しかし、map
はリストの要素を評価結果で置き換えるもので、今回の目的には使えなかった。メモとしてmap
を使うと以下のようなことが可能らしい。すごい。
main = do
let list = [1, 2, 3]
print map (+ 1) list
[2,3,4]
目的を満たす関数はmap
ではなくmapM_
だった。map
と、mapM
、mapM_
の違いが良く理解できていない…。mapM
とmapM_
の違いは、値のリストを返すかどうかだそうだ。結局、プログラムは以下の形に落ち着いた。
main = do
let list = [1, 2, 3]
mapM_ print list
1
2
3
今日はここまで。