ラムダ計算入門

19,290 views
18,852 views

Published on

NPCAでLTしたスライド そのうちブログにちゃんとした解説とかを書くかも

0 Comments
52 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
19,290
On SlideShare
0
From Embeds
0
Number of Embeds
551
Actions
Shares
0
Downloads
138
Comments
0
Likes
52
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • ラムダ計算入門

    1. 1. ラムダ計算入門 yingtai
    2. 2. 自己紹介• 67回生• twitter: @_yingtai• 部誌でラムダ計算のこと書いた• Haskellerワナビ
    3. 3. LTの動機• ラムダ計算が人口に膾炙していない • 部誌書いたのに... • ※部誌の内容は信用しちゃだめです
    4. 4. 流れ• ラムダ計算入門• データ型の表現
    5. 5. ラムダ計算入門
    6. 6. ラムダ計算とは• 「関数」をより抽象的に扱う
    7. 7. 関数• 「箱」(ブラックボックス)• 入力(引数)があって、出力(結果)がある f(x)
    8. 8. ラムダ記法
    9. 9. 要するに• λ[入力].[出力]• なぜ「抽象的」と言えるのか? • = どこがええのんや
    10. 10. 抽象化①• 無名関数 • いちいち名前を付けない λx. x+2
    11. 11. 抽象化②• 高階関数 • 関数そのものを入力 / 出力できる
    12. 12. 例えば、• f(x, y) = x を考える (図はイメージ) • ラムダ記法では? f
    13. 13. 答えλx. (λy.x)
    14. 14. λx. (λy.x) •Pythonコード •f1 と f2 は同じ
    15. 15. カリー化• f(x, y) = x → f(x)(y) = x• これをカリー化と言います
    16. 16. ラムダ記法では• カリー化した関数を簡潔に表せる • λx.(λy.x) で事足りる
    17. 17. でっていう• カリー化して何が嬉しいのか• めんどいだけなのでは...
    18. 18. 嬉しいです• f(x, y) = x • … x と y の両方を渡す必要がある• f(x)(y) = x • … x だけ渡す、という操作が可能• この操作を部分適用と言う
    19. 19. ついでに• λx. (λy. x) は λx. λy. x と表せる • どこがどの関数か自明• λx. λy. x は λxy. x と表せる • ただの省略記法
    20. 20. SKIコンビネータ• S = λx y z. x z (y z)• K = λx y. x• I = λx. x
    21. 21. I コンビネータ• λx. x• Identity combinator (恒等関数)• 取ったのをそのまま返すだけ
    22. 22. Kコンビネータ• λx y. x• Constant combinator• Konstant (独)• 定数関数
    23. 23. Sコンビネータ• λx y z. x z (y z)• Sharing combinator • z をシェアする • S (λa. M) (λb. N) = λz. M N • ただし M = M[a:=z], N = N[b:=z]
    24. 24. データ型の表現
    25. 25. 基本的な考え方• Turing: 関数をデータで表現する • → 手続き型• Church: データを関数で表現する • → 関数型
    26. 26. Church encoding• データ型をラムダ計算でエンコード • 自然数、真偽値、コンテナ、...etc.
    27. 27. 自然数 (Church)• いわゆるチャーチ数• ペアノの公理系に基づいて構成• 1 := suc(0), 2 := suc(suc(0)), ...
    28. 28. 具体的には• 0 := λs z. z• 1 := λs z. s z• 2 := λs z. s (s z)• 3 := λs z. s (s (s z))• ...
    29. 29. Boolean• True := λt f. t• False := λt f. f• if t1 then t2 else t3 := t1 t2 t3
    30. 30. Tuple• (t1, t2) := λx. x t1 t2• fst := λt. t (λf s. f)• snd := λt. t (λf s. s)
    31. 31. List (Church)• cons と nil で表現• [x,y,z]• = (cons x (cons y (cons z nil)))
    32. 32. List (Church)• Nil := λc n. n• Cons := λh t c n. c h (t c n)
    33. 33. List (Church)• [x,y,z]• =λc n. c x(λc n. c y(λc n. c z n))• cons が foldr 的に振る舞う! • foldr = λn c l. l c n • tail = λl. l (λx xs. xs) Nil
    34. 34. Scott encoding• もう一つのエンコーディング• Lazy Kのリストは Scott encoding
    35. 35. 自然数 (Scott)• 0 := λz s. z• 1 := λz s. s 0• 2 := λz s. s 1• 3 := λz s. s 2• ...
    36. 36. List (Scott)• Nil = λf g. f• Cons = λx xs f g. g x xs
    37. 37. List (Scott)• [x,y,z]• = λc. c x (λc. c y (λc. (c z) Nil)) • consはパターンマッチ的!
    38. 38. まとめ• Scott encoding • プログラミングが簡単 • パターンマッチ• Church encoding • 再帰が簡単、計算量
    39. 39. Any questions?

    ×