Posted at

Haskellの基本まとめ2

More than 5 years have passed since last update.


関数の基本

構文

関数名 [引数] = 関数本体


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

基本的なリスト関数


  1. head : 先頭の要素を返す

  2. tail : 先頭を除いた残りのリストを返す

  3. last : リストの最後の要素を返す

  4. init : 最後の要素を除いた残りのリストを返す

  5. length : リストの長さを返す

  6. null : リストが空かどうかを調べる

  7. reverse : リストを逆順にする

  8. take : 先頭から指定された数の要素を取り出したリストを返す

  9. drop : 指定された数の要素を先頭から削除したリストを返す

  10. maximum : リストの中で最大の要素を返す

  11. minimum : リストの那珂で最小の要素を返す

  12. sum : 数のリストの和を返す

  13. product : 数のリストの積を返す

  14. 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]