Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
カリー化入門 2019年あくあたん工房7月部会
Slide 2
Slide 2 text
そもそも カリー化って何?
Slide 3
Slide 3 text
カリー化 (currying, カリー化された =curried) とは、複数の引数をとる関数 を、引数が「もとの関数の最初の引 数」で戻り値が「もとの関数の残りの 引数を取り結果を返す関数」であるよ うな関数にすること(あるいはその関 数のこと)である。 出典:ウィキペディア
Slide 4
Slide 4 text
つまり、
Slide 5
Slide 5 text
N個の引数をとる関数 一引数を取る関数のチェイン
Slide 6
Slide 6 text
具体例
Slide 7
Slide 7 text
𝑓: 𝑥 → 𝑦 関数が引数を一つのみとる つまり、 すでにカリー化されている 引数を1個とる関数の場合
Slide 8
Slide 8 text
𝑓: 𝑥, 𝑦 → 𝑧 ↓ 𝑔: 𝑥 → (ℎ: 𝑦 → 𝑧) 引数を2個とる関数の場合
Slide 9
Slide 9 text
𝑓: 𝑥, 𝑦, 𝑧 → 𝑢 ↓ 𝑔: 𝑥 → (ℎ: 𝑦 → (𝑖: 𝑧 → 𝑢)) 引数を3個とる関数の場合
Slide 10
Slide 10 text
何が うれしいの?
Slide 11
Slide 11 text
具体例として, 2つの引数の合計を返す関数f(x, y) をmap関数に渡す場合を考える
Slide 12
Slide 12 text
カリー化 されていないとき
Slide 13
Slide 13 text
func f(x,y) int { return x + y } func g(x) int { return f(1, x) } list2 = map(g, list1)
Slide 14
Slide 14 text
カリー化 されているとき
Slide 15
Slide 15 text
func f(x,y) int { return x + y } list2 = map(g(1), list1)
Slide 16
Slide 16 text
部分適用で よくね
Slide 17
Slide 17 text
できることは同じ
Slide 18
Slide 18 text
func f(x,y) int { return x + y } g = partial(f, 1) list2 = map(g, list1)
Slide 19
Slide 19 text
おまけ Pythonでカリー化
Slide 20
Slide 20 text
>>> currying.f("a")("b")("c") 'abc' カリー化されてる関数
Slide 21
Slide 21 text
>>> currying.f("a")("b")("c") 'abc' 関数をカリー化する関数
Slide 22
Slide 22 text
ご清聴ありがとう ございました