もしRubyistがHaskellを学んだら(6) リストの使い方
タグ: learning_haskell / 初版公開: 2013-11-05

今日はリストを使ってみる。リストを定義し、リストの中身を順に表示するプログラムを作る。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と、mapMmapM_の違いが良く理解できていない…。mapMmapM_の違いは、値のリストを返すかどうかだそうだ。結局、プログラムは以下の形に落ち着いた。

main = do
	let list = [1, 2, 3]
	mapM_ print list
1
2
3

今日はここまで。