Haskellのリスト
Haskellのデータ構造の1種である「リスト」についてメモ。
リストって、要するにデータがズラズラとくっついて、並んだやつですね。
1.3 リスト入門
(p.7)
リストとは?
- Haskellのリストは、同じ型の要素を複数個格納できる。
- 違う型の要素を入れることはできない。
- リストは、要素をカンマ区切りで並べて、角カッコでくくったもの。
letとは?
- GHCiの中で名前を定義するときはletキーワードを使う。
- GHCiでlet a = 1と入力するのは、スクリプトにa = 1と書いて:lでロードするのと同じ。
(参考)
https://ghcguide.haskell.jp/users_guide/ghci.html#ghci-introduction
Haskellでは let 式は in をともないます.
しかし,GHCiでは,式は IO モナドの中でも解釈されますので,上の例は in を伴わない let 束縛文であることは,行が表示されないことで示されています.
「let」は、「let式」とか「let束縛文」というもののようです。
Haskell基礎文法最速マスター - think and error
変数
letで変数を値に束縛します(という言い方をします)。
一度束縛したら、再代入(再束縛?)等の破壊的操作は出来ません。
Swiftで定数を宣言するときの「let」みたいなもんですね?
Haskellのlet式の使い方は、また後で詳しく見てみたいと思います。
リストの特徴
整数のリスト、文字のリスト、とかを作れます。
整数や文字など、違うデータ型を混ぜて入れることはできません。
リストとタプルの違い
「タプル」という別なデータ構造だと、違う型の要素も格納できます。
(参考)リストとタプル - lnzntのHaskell日記 - haskell
リストの操作
連結 ++演算子
- Haskellでは、文字列は文字のリストとして表されている。
- 文字列"hello"はリスト['h','e','l','l','o']と同じ。
リストの先頭に追加 :演算子(cons演算子)
- [1,2,3]は1:2:3:[]の構文糖衣(シンタックスシュガー)
リストの先頭から位置を指定して取得 !!演算子
- リストの要素を先頭からの位置で取得したいときには「!!演算子」を使う。
- リストの添字は0から数える。
リストの比較
- 中の要素が比較可能であれば、リスト同士も比較可能。
- <、<=、>=、>を使って2つのリストを比較すると、辞書順で比較される。
基本的なリスト関数
head関数
head関数はリストを受け取り、そのhead(先頭の要素)を返します。
tail関数
tail関数はリストを受け取り、そのtail(先頭を取り除いた残りのリスト)を返します。
last関数
last関数はリストの最後の要素を返します。
init関数
init関数はリストを受け取り、最後の要素を除いた残りのリストを返します。
null関数
null関数はリストが空かどうかを調べる。
空ならTrueを、空でなければFalseを返す。
reverse関数
reverse関数はリストを逆順にする。
take関数
take関数は数とリストを取り、先頭から指定された数の要素を取り出したリストを返す。
drop関数
drop関数は、指定された数の要素を先頭から削除したリストを返す。
maximum関数
maximum関数は、何らかの順序が定義された要素からなるリストを受け取り、その中で最大の要素を返す。
minimum関数
minimum関数は最小の要素を返す。
sum関数
sum関数は数のリストを受け取り、それらの和を返す。
product関数
product関数は数のリストを受け取り、それらの積を返す。
elem関数
elem関数は要素とリストを受け取り、それがリストの要素に含まれているかどうかを返す。
elem関数は中置関数として使うと読みやすい。
まとめ
Haskellの学習で、リストの操作を最初にやるのは、基本中の基本だからでしょうか?
とりあえず、リストの操作に習熟しておきたいと思います。
- 作者: Miran Lipovača,田中英行,村主崇行
- 出版社/メーカー: オーム社
- 発売日: 2012/05/23
- メディア: 単行本(ソフトカバー)
- 購入: 25人 クリック: 580回
- この商品を含むブログ (73件) を見る