10000hの技術メモ

この先生きのこるための勉強内容&時間記録

Haskell入門 7.1

Haskell入門 関数型プログラミング言語の基礎と実践

Haskell入門 関数型プログラミング言語の基礎と実践

2章や3章をやってみて、正直ひとつひとつの要素を「ふーん」と読んでいってもいまいちわからなかったので、ここはひとつ、先まで飛ばしていってとりあえずコードを書き始めてからもどって来ようと思いました。

7.1 標準ライブラリ

Preludeモジュールは暗黙的にインポートされるので、Preludeモジュールの関数=組み込み関数とも言える。

Data.Bitsはビット演算のための関数を提供。

モジュールのimportはimport Data.Bitsのように行う。やらないと(当たり前だけど)中の関数は使えない。試しに、インポート前後の比較をしてみた。

*Main Lib> b = 0x05 :: Word -- 0x05 : 0000 0101
*Main Lib> testBit b 0

<interactive>:2:1: error:
    Variable not in scope: testBit :: Word -> Integer -> t
*Main Lib> import Data.Bits
*Main Lib Data.Bits> testBit b 0
True

Data.Charは文字に関する関数を提供するモジュール

Data.List[a]型に関する関数が定義されたモジュール。Listに関するほとんどの関数はPreludeモジュールに入っている。Data.Listのほうに入っているのは、例えば

  • group
  • oartition
  • nub
  • interspere

など。

これ、ProjectEulerやってるころにHaskell使ってたらもっとスムーズだった気がしてきた。。

groupを使った例

*Main Lib Data.Bits Data.Char> import Data.List
*Main Lib Data.Bits Data.Char Data.List> group [3, 3, 5, 3, 3, 3, 1, 1]
[[3,3],[5],[3,3,3],[1,1]]

3をまとめるわけではないみたい。

intercalateを使った例

*Main Lib Data.Bits Data.Char Data.List> intercalate [] [[1,2,3],[2,3],[4,5]]
[1,2,3,2,3,4,5]
*Main Lib Data.Bits Data.Char Data.List> intercalate ", " ["abc", "de", "fghi"]
"abc, de, fghi"

第一引数で区切って第二引数の中身を結合するようで、上に出したような、リストのリストからリストにするとか、文字列のリストから文字列にするときに便利みたい。

inPrefixOfなどを使ったときの例で、

*Main Lib Data.Bits Data.Char Data.List> "hoge" `isPrefixOf` "hogehoge"
True

と本にはあった。 Haskellでは"`"をつけると関数を中置にできるようで。自分は使わない気がするけど面白い。

Data.Array

イミュータブルな配列を提供します。Data.Arrayによる配列はリストとは違い、添字によって各要素へ高速にアクセスできます。

今回の勉強時間:1時間 累計勉強時間:21時間58分