すごいHaskellたのしく学ぼう
https://makeshop-multi-images.akamaized.net/ohmsha/itemimages/0000000019262.gif
書籍情報
副教材
イントロダクション
Haskell?
純粋関数型:
どのようなことをするか、ではなく「それが何であるか」を記述する
値は不変
副作用なし、参照透明性 (同じ入力に対して同じ結果が返ることが保証されている)
静的型付き言語
型推論
遅延評価
実行環境の準備
macOS: brew install haskell-stack && stack setup
GHCi 実行: stack ghci
第1章 はじめの第一歩
Infix 関数 (e.g. 四則演算)
Prefix 関数を \` で囲えば infix 関数として使える
リスト: [1, 2, 3]
文字列は文字のリストとして見做すことができリストと同じように操作できる
append: ++
cons: :
[1, 2, 3] ってのは 1 : 2 : 3 : []
要素へのアクセス: [1,2,3,4,5,6] !! 3 ( => 4)
head (先頭の1つ) / tail (先頭以外のリスト) / init (最後以外のリスト) / last (最後の1つ)
空リストを与えると実行時エラーになる
レンジ: [1..20]
増加方向にしか対応してない (後述)
ステップ: [2, 4..20]
1つめと2つめの要素で要素間の差を指定する
ステップは1つしか指定できない (等差なのしかできない)
減少するレンジを作りたい時はステップで指定しないと空リストが返る (e.g. [10, 9..1])
浮動小数点数を使うと精度の問題で期待通りにならないことがある
無限リストを活用する
take とレンジ: take 10 [2,4..] (=> [2,4..2*10])
take と cycle: take 10 (cycle [1,2,3]) (=> [1,2,3,1,2,3,1,2,3,1])
take と repeat
リスト内包表記
タプル
第2章 型を信じろ!