12月12日の学び
データ型の定義
Prelude> data Shape = Circle Float Float Float | Rectangle Float Float Float Float Prelude> :t Circle Circle :: Float -> Float -> Float -> Shape Prelude> :t Rectangle Rectangle :: Float -> Float -> Float -> Float -> Shape
12月11日の学び
- そもそも型は、変数がメモリにアクセスする場合にint型ならXXXバイト、char型ならXXXバイトというようにアクセスするサイズを決めるために用いられると思っていたけど、それだけではないらしい。
- 型を用いることである種のバグが存在しないことにも繋がるらしい。
12月9日&10日の学び
最近Haskellばかり書いているな。。
メモ
- 述語とは真理値を返す関数
map関数
関数とリストを受け取り、その関数をリストの全要素に適用して新しいリストを生成する。
Prelude> map (+3) [1, 5, 3, 1, 6] [4,8,6,4,9] Prelude> map (map (^2)) [[1, 2], [3, 4, 5, 6], [7, 8]] [[1,4],[9,16,25,36],[49,64]]
ラムダ式
ラムダ式は1回だけ必要な関数を作るときに使う無名関数。通常ラムダ式は高階関数に渡す関数を作るためだけに使われる。
Prelude> map (+ 3) [1, 2, 3] [4,5,6] Prelude> map (\x -> x + 3)[1, 2, 3, 4] [4,5,6,7]
畳み込み
畳み込みのフォーマット
foldl 2引数関数 初期値 リストの形式を取る
左畳み込みの例
- 左畳み込みはリストの左端の要素から始める
- 左畳み込みを用いたmapの実装例は以下
- 注意:'++'は2つのリスト同士を結合してリストを生成する演算子
map' :: (a -> b) => [a] -> [b] map' f xs = foldl (\ acc x -> acc ++ [f, x]) [] xs
右畳み込みの例
- 右畳み込みはリストの右端の要素から始める
- 右畳み込みを用いたmapの実装例は以下
- 注意:':'は文字とリストを結合してリストを生成する演算子
map' :: (a -> b) => [a] -> [b] map' f xs = foldr (\ x acc -> f x : acc) [] xs
関数適用演算子
- 関数適用演算子の$は最も低い優先度を持っており右結合
- この特徴を利用すると式の中の()の数を減らすことで可読性を向上させることができる
Prelude> sqrt $ 3 + 4 + 9 + 1 4.123105625617661 Prelude> sqrt (3 + 4 + 9 + 1) 4.123105625617661 Prelude> sum (filter (> 10) (map (*2) [2..10])) 80 Prelude> sum $ filter (> 10) $ map (*2) [2..10] 80
12月8日の学び
ソフトウェアを以下の3通りに分類して考えるのはとても的を得ていると思う。そして大多数のソフトウェアエンジニアが最後の「一般 アプリケーションに従事している」というのもまさにそのとおり。
- 「基盤系・学術系」
- 「組み込み系」
- 「一般アプリケーション」