Haskellおべんきょメモ
Haskellを学習している私の個人的なメモ。
おしごとで使わないので、単純に趣味と実益を兼ねたみたいな。
リスト
- リストは再帰的
-
head
は要素を取り出す -
tail
は先頭の要素を取り除いた別のリストを生成する
- - 故に
空のリスト[]
に対して上記の操作をするとエラー発生 -
:
はコンスという(リストを作るための+
だと思えばいいかな)
list.hs
--この関数の動きを具体的にすると
head [1, 2, 3, 4, 5]
-> 1
tail [1, 2, 3, 4, 5]
-> [2, 3, 4, 5]
--こういうことなのか
head 1 : 2 : 3 : 4 : 5 : [] --先頭の1要素を取り出す(つまり1が取れる)
tail 1 : 2 : 3 : 4 : 5 : [] --先頭の1要素を取り除いたリストを生成(1が取り除かれてくっつく→リストになる)
ほえぇ
- リストのプレリュード関数は部分適用もできるっぽい
- 二項演算子で部分適用する場合は、右オペランド・左オペランドどちらの引数を待っているかを考えること
再帰
- 再帰のコツは終了条件を先に決めておくこと
- これ以上はとくにないかな…(再帰的な処理をまだ実務でも実装したことがないから意味は分かるが現状知識的な部分だけもらっておく)
パターンマッチング
- 引数を調べるだけ
-
case x of
と似ているけどcase x of
の方は引数によって処理が実行まで含まれる
patern.hs
--これがcase文
chigai x = case x of
1 -> putStrLn "引数が1だったので実行されました"
2 -> putStrLn "引数が2だったので実行されました"
_ -> putStrLn "引数が3以上だったので実行されました"
Prelude> chigai 2
引数が2だったので実行されました
--パターンマッチング
--引数が偶数かを調べる
chigai x | x `mod` 2 == 0 = True
| otherwise = False
Prelude> chigai 5
False
Prelude> chigai 4
True
まあ、こんな感じで使っていけばええか…
感想
再帰はむずかしい。
けれど使いこなせたらカッコいいと思う。
今日は終わり。