Haskellのmapを理解する

こんにちは!

とびろぐ管理人のとびうおです。

今日はHaskellのmap関数を理解するというので、書いていきたいと思います!

基本的な使い方

map関数というのは、特定の関数をリストの各要素に適応し、新しいリストを生成すると言った、高階関数です。

この関数では、コードの記述をシンプルにし、再利用生を高めることに役立ちます。

使い方の例

例えば、以下のように、全ての要素を2倍にする関数をリストに適応したい場合は、以下のようにmap関数を定義することができます。

doubleList :: [Int] -> [Int]
doubleList xs = map (*2) xs

main = print (doubleList [1, 2])

このように定義して、作ったファイルを実行すると、

Haskellのmapを理解する

このように各要素が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"])

このように書くと、

Haskellのmapを理解する

のように無事表示されます。

とびうおくん
とびうおくん

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])

このようにすると以下のように出力されます。

Haskellのmapを理解する
とびうおくん
とびうおくん

2で割れるもののみが
2倍されるよ!

複雑なリストに対応する

では、最後に複雑なリストに対応するmapを考えていきましょう!

main = print (map (\[x, y] -> x + y) [[1,2], [3,4], [5,6]])

上記のように、リストのリストを受け取り、その要素を足し合わせるなんていうことも作ることができます。

とびうおくん
とびうおくん

引数が複数使えるなんて
なんて便利なんだ!

まとめ

haskellのmapについてまとめてみました。

mapを理解することで、haskellの良さに少しでも気づけたような気がします!

とびうおくん
とびうおくん

勉強頑張るぞ!

プログラミングの記事は他にも!

とびろぐでは他にもプログラミングの多くの記事を出しています!

見たい方はぜひ見てみてください↓↓

テクノロジー

最新のテクノロジーに関する記事の一覧です。

とびうお
ブログ管理人です!
swimaneというアプリをリリースしました!

コメント

タイトルとURLをコピーしました