by shigemk2

当面は技術的なことしか書かない

第2期 第5回 H本読書会 in 秋葉原 #readhbon

前回のふりかえり(第4章)

  • 再帰
  • maximumの再定義
  • replicateの再定義
  • takeの再定義
  • reverseの再定義
  • repeatの再定義(そのままだと終わらないので、takeと組み合わせる)
  • zip
  • elem
  • クイックソート

再帰的に考える

  1. 基底部を見極める
  2. 解くべき問題をより小さな部分問題へと分割する方法を考える

第5章 高階関数

  • 高階関数 引数として関数をとったり戻り値として関数を返したりできる
  • カリー化 複数の引数を受け取れるかのように見えたやつ

f:id:shigemk2:20150121201704p:plain

関数は何か材料を受け取って何かを作り出す小さな工場であるという認識

f:id:shigemk2:20150121203035p:plain

examples.hs

部分適用をカリー化と呼ばないで - kmizuの日記

f:id:shigemk2:20150121203516p:plain

f:id:shigemk2:20150121203553p:plain

カリー化と部分適用(JavaScriptとHaskell) - Qiita

とりあえずカリー化は関数のネストで、部分適用は引数の一部利用。

zipWith

zipWith.hs

f:id:shigemk2:20150121205812p:plain

flip

flip.hs

f:id:shigemk2:20150121205746p:plain

map

例を見ると地味に面倒。mapはリスト内包表記で代替できるけど、mapのmapとかになってくるmapのほうが楽。って本に書いてあるけど、結構どっちも微妙だったりする。

f:id:shigemk2:20150121210237p:plain

f:id:shigemk2:20150121210531p:plain

f:id:shigemk2:20150121210540p:plain

filter

f:id:shigemk2:20150121210906p:plain

mapとfilterは要所要所で使い分けたらいいと思います。

クイックソート

quicksort.hs

f:id:shigemk2:20150121211744p:plain

flipの応用

5.6あたりでしゃべる

f:id:shigemk2:20150121212559p:plain

mapとfilterさらなる例

Haskellは怠惰なので、最初の値を拾えたら評価をやめる。

largestdivisible.hs

コラッツの問題

takewhile.hs

map関数に複数の引数を与える

map.hs

f:id:shigemk2:20150121214323p:plain

カリー化と部分適用とクロージャ

P73まで終わり。