こんにちは!
とびろぐ管理人のとびうおです。
今日はHaskellのmap関数を理解するというので、書いていきたいと思います!
基本的な使い方
map関数というのは、特定の関数をリストの各要素に適応し、新しいリストを生成すると言った、高階関数です。
この関数では、コードの記述をシンプルにし、再利用生を高めることに役立ちます。
使い方の例
例えば、以下のように、全ての要素を2倍にする関数をリストに適応したい場合は、以下のようにmap関数を定義することができます。
doubleList :: [Int] -> [Int]
doubleList xs = map (*2) xs
main = print (doubleList [1, 2])
このように定義して、作ったファイルを実行すると、
このように各要素が2倍になって表示されたリストが出力されます。
これがmapの基礎だよ!
配列の各文字の長さを出力する例
続いてはmapを使用して、配列の文字の各長さを表示させる例をお伝えします。
lengths :: [String] -> [Int]
lengths xs = map(length) xs
main = print (lengths ["hogehoge", "hohgoe"])
もしくは
lengths :: [String] -> [Int]
lengths xs = map length xs
main = print (lengths ["hogehoge", "hohgoe"])
このように書くと、
のように無事表示されます。
mapの中で
関数も使えるのか!
map関数でラムダ関数をする場合
ラムダ式の例
以下のような一般的な式を
add x y = x + y
result = add 5 3 -- 結果は 8
add = \x y -> x + y
result = add 5 3 -- 結果は 8
上記のように書くことができるのがlamda式です。
例えば、先ほどの
doubleList :: [Int] -> [Int]
doubleList xs = map (*2) xs
main = print (doubleList [1, 2])
をラムダ式で表示するとこうなります。
nums = map (\x -> x * 2) [1, 2, 3, 4, 5]
-- 結果は [2, 4, 6, 8, 10]
ラムダ式を
mapの中で使っちゃえ!
ラムダ式の応用の例
ラムダ式を応用して使うと、以下のようになります。
条件付きでかける
条件付きでmapしているものに対して書くことが可能です。
main = print (map (\x -> if x `mod` 2 == 0 then x * 2 else x) [1, 2, 3, 4, 5, 6])
このようにすると以下のように出力されます。
2で割れるもののみが
2倍されるよ!
複雑なリストに対応する
では、最後に複雑なリストに対応するmapを考えていきましょう!
main = print (map (\[x, y] -> x + y) [[1,2], [3,4], [5,6]])
上記のように、リストのリストを受け取り、その要素を足し合わせるなんていうことも作ることができます。
引数が複数使えるなんて
なんて便利なんだ!
まとめ
haskellのmapについてまとめてみました。
mapを理解することで、haskellの良さに少しでも気づけたような気がします!
勉強頑張るぞ!
プログラミングの記事は他にも!
とびろぐでは他にもプログラミングの多くの記事を出しています!
見たい方はぜひ見てみてください↓↓
最新のテクノロジーに関する記事の一覧です。
コメント