プログラミングと日々思ったことなど

ブログ名通りです。仕事でプログラミングをはじめました。

Haskell入門

Haskellの参考書を読んだので、思い出せるように書いていきます。
すごいHaskellたのしく学ぼう! | Miran Lipovača, 田中 英行, 村主 崇行 |本 | 通販 | Amazon
↑読んだ本

p6の下部にある文章の言い回しが好き

インスタンスとインターフェース p27
インスタンスオブジェクト指向におけるインスタンス(クラスの実体)とは概念が異なり、クラスの実装(Implement)に相当。
ちなみにインタプリタ
人間に分かりやすい高水準プログラミング言語高級言語)で書かれたコンピュータプログラムを、コンピュータが解釈・実行できる形式に変換しながら同時に少しずつ実行していくソフトウェア。英語の原義は「通訳者」。
インタプリタとは - IT用語辞典 e-Words


レンジ・・・範囲のこと

フィボナッチ数列の例から再帰について p51
2つ前の項と1つ前の項を足し合わせていくことでできる数列。
1, 1, 2, 3, 5, 8, 13, 21…

Haskellでは再帰が重要。Haskellでは命令型言語のように計算をどうやってするかを指定するのではなく、求めるものが何であるかを宣言して計算を行う。

最大値を求める例は、リスト内でいくつかのパターンに分解されて、比較をしていました。
基礎的なことですが、面白いですね。
この辺でピボットの意味もわかりました。軸なのですね。

関数は、何か材料を受け取って何かを作り出す小さな工場 p62

コラッツ列 p71

畳み込み p75
畳み込みを使えば、リストを1要素ずつ一回だけ走査してそれに基づいた結果を返すような関数なら何でも実装できる。
畳み込みは2引数関数(2つの引数をとる関数。+やdivなど)と、畳み込みに用いる値(アキュムレータ)の初期値、畳み込むリストを受け取る。

foldrl1のアナロジー(類比) p82

ghci> map ($ 3) [(4+),(10*),(^2),sqrt]
$関数は最も低い優先順位を持つ。右結合なので括弧を消せる
mapは関数とリストを受け取り、その関数をリストの全ての要素に適用
[7.0 , 30.0 , 9.0 , 1.7320508075688772]
(4+3) , (10*3) , (3*3) , (√3)

replicate・・単一の値からなるリストを作る。repeatは1つの要素を受け取り、その要素のみが無限に繰り返される無限リストを生成する。永遠に終わらなくなる。
ghci> replicate 3 10
[10,10,10]

値コンストラクタ関数 p112
値コンストラクタとは、データ型定義の、実際に型が取り得る値の種類を指定する

参考:
【Haskell】 言葉の定義まとめ(型クラス、型コンストラクタ、値コンストラクタ、型引数など) - takafumi blog

エクスポート文の後に括弧をつけないことで、型をエクスポートするけれどもその値コンストラクタは一切エクスポートしない、という選択もできる p116

スカラーとは、ひとつの大きさや量を表す数のこと p125
Eq型クラスは「等値性テストができる物」という振る舞いを定義している。p126

Either a b には値コンストラクタが2つある。Leftを使うと、Eitherの中身はa型になる。Rightを使ったときは、中身はb型になる。Either型を使うと「2つの型のうちどちらか一方」という値を表せる。 p134
data Either a b = Left a | Right b deriving (Eq, Ord, Read, Show)

糖衣構文 (syntax sugar) p136
プログラミング言語で、ある構文を別の記法で記述できるようにしたもの。長い構文を簡略に記述できるようにしたり、複雑な構文を読み書きしやくするために用意される。
[4,5] は構文糖衣を脱がすと 4:(5:[])

結合性(fixity)は優先順位を決めることができる p138
infixr 5 :-: (:-: が新しい関数)
結合性宣言を省略した演算子は全てinfixl 9 になる

instance Eq Maybe where p146
上記のようなインスタンス宣言は不可能。
aには具体型が入るが、Maybeは型引数をを1つ取って具体型を生み出す型コンストラク

Functor型 p151
class Functor f where
fmap :: (a -> b) -> f a -> f b
fmapは、ある型aから別の型bヘの関数と、ある型aに適用されたファンクター値を取り、別の型bの方に適用されたファンクター値を返す関数。

p155 問題:Map k がどのようにFunctorのインスタンスになるのか
この問題については復習がでらまた別記事に。
答えを考える↓
Haskell【Functor型問題と復習】 - プログラミングと日々思ったことなど