第1章
関数プログラミングとは、計算の基本は関数を引数に適用すること。
→さっそく関数プログラミングが出てきた
手続き型では、関数が関数を引数や戻り値にしたり、中間データ構造を作るのを勧めてない。
→今はいろんなところでできるようになっているはず
[* Haskellの特徴]
以下が分かるような分からないような
リスト内包表記
再帰関数
パターンマッチとガードを使うと際立つ
高階関数
引数や返り値としての関数
ドメイン特化言語?
作用を持つ関数
等式推論
関数sumが様々な数値に対応?がよく分からない
要素が空の場合と、2つ以上の要素の場合とに分けるのが面白い。
qsort :: Ord a =>
[a] ->[a]
この記述の意味がよく分からない。
ジェネリクスということか?
2023-07-15
12ページ
[* 1.5.3 アクションを逐次に実行する]
純粋な関数と副作用を引き起こす関数を区別する
副作用があるものがモナド型?
2章
Haskellのコンパイラをインストールする
ネット環境が悪くダウンロードが遅いので今日はここまで。
2023-07-19
2章
レイアウト規則
Pythonみたいにインデントでスコープが区切られる
セミコロンと波カッコで区切ることもできる
タブ文字でレイアウトを調整するのは避けるべき、タブ文字は8文字分として扱われる
コメントはハイフン2つ。複数行は {- xxxx -}
2023-07-22
3章
not :: Bool -> Bool
これは、notはBool型の値を別のBool型に変換するよ、ということ。
3.4まで読んだ。
次は3.5
2023/07/24
3.5 から
全域関数と部分関数
部分関数は引数によっては未定義になるだろう。
Haskellでは部分関数で良い。
3.6
一度に1つの引数をとる関数をカリー化されているという
関数を返すのでタプルより柔軟ということか?
次は3.7から
2023/07/25
3.7 から
多相型 lengthはどんな型に対しても長さを返す。
「型に型変数を含めることで表現できる」
Boolなどの特定の型ではなく、任意の型を示す=型変数
2023/07/29
3.8 多重定義型
引数や返り値について複数の型クラス制約を持つこと
2023/08/02
3.9
基本クラスは特筆することはなかったが、最初のこの文が分からない。
型は、互いに関連する値の集合であったことを思い出してください。この考え方に従えば、型クラス(または単にクラス)とは、共通のメソッドを提供する型の集合です。
型の考え方がJavaやC#と違うのか。
2023/09/06
4.4.1.
タプルパターン、リストパターンがある
4.5 ラムダ式
ラムダ式は無名関数
4.6. セクション
2023/09/07 ぜんぜんわからん。
真ん中に置かれる関数を演算子という。
でも正しくないので記号で囲んで表現する必要がある。
5章 リスト内包表記
5.1の基礎概念は分かりやすい。
実際にコードを書いてないので、ふわっとした理解にとどまっている。
5.2 ガード
こういう表現ができるのかとちょっとすっきりした。