関数の基本
構文
関数名 [引数] = 関数本体
例
sample.hs
doubleMe x = x + x
> :l sample.hs
> doubleMe 10
20
> doubleMe 2.3
6.4
Haskellにおける関数の特徴
- 関数の定義の中で、自分で定義した関数を呼び出すことも出来る。
- 例:
doubleUs x y = doubleMe x + doubleMe y
- 例:
- 必ず何かしらの値を返す。
- 関数名にアポストロフィ( ' )が使える。
- 慣習的に正格(遅延じゃない)版の関数を表したり、少し変更した場合に元の関数名に似た名前にするために使う。
- 関数名は小文字から始める。
リストの基本
Haskellのリストは一様なデータ構造
> let numbers = [1, 2, 5, 7, 10]
> numbers
[1, 2, 5, 7, 10]
> let strings = ['h', 'e', 'l', 'l', 'o']
> strings
"helloe"
リストの連結
> [1, 2, 3] ++ [4, 5, 6]
[1, 2, 3, 4, 5, 6]
> "hello" ++ " " ++ "world"
"hello world"
> "OK":" Google"
"OK Google"
> 4:[1, 2, 3]
[4, 1, 2, 3]
リストの要素へのアクセス
※添字は0から
> "abc" !! 1
'b'
> [2, 4, 6, 8] !! 3
8
リストの入れ子
> let lists = [[1, 1, 1], [2, 2], [3, 3, 3, 3]]
> lists
[[1, 1, 1], [2, 2], [3, 3, 3, 3]]
> lists !! 1
[2, 2]
リストの比較
中の要素を辞書順で比較する
> [3, 2, 1] > [1, 2, 1]
True
> [1, 2, 3] == [1, 2, 3]
True
基本的なリスト関数
- head : 先頭の要素を返す
- tail : 先頭を除いた残りのリストを返す
- last : リストの最後の要素を返す
- init : 最後の要素を除いた残りのリストを返す
- length : リストの長さを返す
- null : リストが空かどうかを調べる
- reverse : リストを逆順にする
- take : 先頭から指定された数の要素を取り出したリストを返す
- drop : 指定された数の要素を先頭から削除したリストを返す
- maximum : リストの中で最大の要素を返す
- minimum : リストの那珂で最小の要素を返す
- sum : 数のリストの和を返す
- product : 数のリストの積を返す
- elem : 指定した要素がリストに含まれているかを調べる
> head [1, 3, 5, 7]
5
> tail [1, 3, 5, 7]
[3, 5, 7]
> last [1, 3, 5, 7]
7
> init [1, 3, 5, 7]
[1, 3, 5]
> length [1, 3, 5, 7]
4
> null [1, 2, 3]
False
> null []
True
> reverse [1, 2, 3]
[3, 2, 1]
> take 2 [1, 3, 5, 7]
[1, 3]
> drop 2 [1, 3, 5, 7, 9]
[5, 7, 9]
> maximum [3, 9, 1, 5]
9
> minimum [3, 9, 1, 5]
1
> sum [2, 4, 6, 8]
20
> product [2, 4, 6, 8]
384
> 2 `elem` [1, 3, 2, 5]
True
> 4 `elem` [1, 3, 2, 5]
False
レンジ:列挙出来る要素のリスト
> [1..10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
> ['a'..'g']
"abcdefg"
ステップを指定したレンジ
> [2, 4..10]
[2, 4, 6, 8, 10]
> [5, 4..1]
[5, 4, 3, 2, 1]