Successfully reported this slideshow.
Your SlideShare is downloading. ×

ラムダ計算入門

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 39 Ad
Advertisement

More Related Content

Advertisement
Advertisement

ラムダ計算入門

  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?

Editor's Notes

  • \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

×