listを扱うHaskellの関数
lines関数
このlines
関数は、Haskellのデフォルトの関数として定義されています。
その役割は文字列を\n
で区切られた配列に変換します。
lines
関数の型を確認してみると、String
型から[String]
型に変更する関数であると確認できると思います。
ghci> :type lines lines :: String -> [String]
- サンプルコード
ghci> lines "foo\nbar" ["foo","bar"]
- cf) 反対に、
unlines
関数は文字列の配列を\n
でつなげます。
ghci> unlines ["foo", "bar"] "foo\nbar\n"
last関数
last関数は配列や文字列の最後の要素を返却します。
ghci> :type last last :: [a] -> a ghci> last "bar" 'r'
take関数
take
関数はリストの最初のk個の要素で構成されるサブリストを返します。
反対に、drop
関数はリストの最初のk個の要素を削除したサブリストを返します。
ghci> take 3 "foobar" "foo" ghci> drop 3 "foobar" "bar"
これらの関数は型を確認してみると、二つの引数 3
とfoobar
がInt -> [a]
ghci> :type take take :: Int -> [a] -> [a] ghci> :type drop drop :: Int -> [a] -> [a]
all関数とany関数
- all は、ひとつめの関数がリストのすべての要素で
True
場合に True を返します。 - 一方、any は、述語がリストの少なくとも 1 つの要素で
True
した場合に True を返します。
ghci> :type all all :: (a -> Bool) -> [a] -> Bool
odd
関数は数値を引数に取り、奇数であればTrue
を返却します。
all odd
を組み合わせることで、すべての配列の要素が奇数であれば
ghci> all odd [1,3,5] True ghci> all odd [3,1,4,1,5,9,2,6,5] False ghci> any even [3,1,4,1,5,9,2,6,5] True
isPrefixOf : 文字列を含むか確認
文字列を含むか確認し、含めばTrue
を返す
ghci> "foo" `isPrefixOf` "foobar" True ghci> [1,2] `isPrefixOf` [1,2,3,4] True
しかし、二番目の実行結果を確認すれば分かるとおり、 isPrefixOfの本質は、ひとつ目の配列が二つ目の配列に含まれているかどうかを確認するというもの
zip関数
zip関数は二つの配列からチャックを閉めるように、 張り合わせていきます。
ghci> :type zip zip :: [a] -> [b] -> [(a, b)] ghci> zip [12,72,93] "zippity" [(12,'z'),(72,'i'),(93,'p')]
関数を引数に取る関数
filter関数
filter関数はひとつ目の関数でTrueが返ってくるものだけを返却する関数です。
filter関数の型を確認すると、引数のひとつ目の型が(a -> Bool)
であることが確認できます。
ghci> :type filter filter :: (a -> Bool) -> [a] -> [a]
filter odd [2,4,1,3,6,8,5,7] [1,3,5,7]
zipWith関数
zip関数は二つの配列から貼り合わせるようにタプルを作成しました。
ghci> zip [12,72,93] "zippity" [(12,'z'),(72,'i'),(93,'p')]
zipWith関数は以下の内容を引数に取りますが、タプルを作成するのではなく関数の結果を追加します。
- 一つの関数
- 二つの配列
ghci> :type zipWith zipWith :: (a -> b -> c) -> [a] -> [b] -> [c] ghci> zipWith (+) [1,2,3] [4,5,6] [5,7,9]
1+4と2+5と3+6を行い、配列の結果を返却します。