Help us understand the problem. What is going on with this article?

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]
finc
健康寿命を伸ばすアプリFiNCの開発・運営を行うモバイルヘルステクノロジーベンチャー
https://finc.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away