TaPL_chap11

633 views
556 views

Published on

TaPL読書会での発表スライド(11章後半メイン)です。

Published in: Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
633
On SlideShare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
7
Comments
0
Likes
2
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
  • TaPL_chap11

    1. 1. TaPL Reading (7th)Chapter 11 -Simple Extensions- @a_hisame Oct 24, 2012 1
    2. 2. Outline11章の復習 (11.1 BaseTypesから 11.9 Sumsまで)11.10 Variants11.11 General Recursion11.12 Lists 2
    3. 3. section 11.1 - 11.2・11.1 Base Types 特に構造を持たない型 Bool, Nat, Floatなど・11.2 The Unit Type 値unitを唯一の要素として持つ型 Base Typeの一種 意味のある値を受け渡ししない場合に 利用する(副作用を用いる場合など) 3
    4. 4. section 11.3・11.3 Derived Forms 一種の省略形。構文糖衣(*)の事。 Sequence t1; t2 (λx: Unit . t2) t1 where x FV(t2) [def FV on P.69] Wildcard (λ_: S . t) (λx: S . t) where x FV(t)* 構文糖衣: 読み書きのしやすさの為に導入される、既に定義されている構文の書き換えとして定義されたもの. 4
    5. 5. section 11.4 - 11.5・11.4 Ascription 型に関する情報・記法の提供  ・特定の型の明示(as T)  ・型の省略記法(UU = Unit -> Unit)・11.5 Let Binding Derived Formの一種 let x = t1 in t2 (λx: T1 . t2) t1 Evaluation Ruleから、t2中のxはt1に置き換わる 5
    6. 6. section 11.6 - 11.8・11.6 Pairs 2つの要素を持つ値 {v1, v2} : T1 T2 と表現・11.7 Tuples Pairの拡張。n個の要素を持つ値 {vi i ∈ 1..n} : {Ti i ∈ 1..n} と表現・11.8 Records Tupleの拡張。要素にラベルをつけたもの {li = vi i ∈ 1..n} : {li : Ti i ∈ 1..n} と表現 ここでは、等価性に順序を考慮する ({x=5, y=1} {y=1, x=5} ) 6
    7. 7. section 11.9・11.9 Sums T1とT2という2つの型に対して、どちらかの型の 値を持つ新たな(T1+T2)型を定義 ・inl x と inr x で T1,T2のどちらに属するかを判定 このルールを単純に導入すると、型付けの一意性 規則(Theorem9.3.3)が崩れる Subtyping(継承)に関する話が出てくる ※Theorem9.3.3 与えられた型環境Γの下で任意の項tは高々1つの型しか 持たない 反例: inl 5 : (Nat + Nat) かつ inl 5 : (Nat + Bool) ここでは、解決策に明示的型指定を選択。 例:inl 5 as Nat + Nat inl 5 as Nat + Bool 7
    8. 8. Variants・11.10 Variants Sumsを一般化(*)して、Recordの様にラベルをつ けたものをVariantsと定義する ・inl t1 as T1+T2 → <l1=t> as <l1:T1, l2:T2> ・よく使われる例を3例紹介 Option 既存の型に 値を取れない領域 を付加 nullの利用も、パターンとしてはOptionになる OptionalNat = <none: Unit, some: Nat>※ 定義より、Sums(+)は2項までしか対応しない 8
    9. 9. Variants・11.10 Variants Enumerations Variantsの型に属する値を作る事ができる Weather = <sunny:Unit, cloudy: Unit, rainy: Unit> Single-Field Variables 値を型で包むことで、不用意な計算や変換を行え ないようにする ・単位系の計算などに有用 9
    10. 10. Variants・11.10 Variants (他の話題) VariantsとML系のDatatype定義の違い ・記法が異なる ・型アノテーション(as T)が不要 ・Unit型の値ではない ・再帰的定義(例: List)が可能 ここで出てきたSumやVariantは Disjoint Union(直和) と呼ばれる事もある 10
    11. 11. General Recursion・11.11 General Recursion λ計算ではfix combinatorによって再帰を実現して いたが、この言語系ではどのように再帰を行うか? この言語系でもfix combinatorを定義したいが、単純型付 きラムダ計算ではfixが定義できないため、termとして導入 する(Fig.11-12, P.144)。 fix (λx: T1 . t2) [E-FixBeta] → [x ⇨ (fix (λx:T1 . t2))] t2 11
    12. 12. General Recursion・11.11 General Recursion fix (λx: T1 . t2) [E-FixBeta] → [x ⇨ (fix (λx:T1 . t2))] t2 fix ff = [P.143 評価を進めた] λx: Nat . if iszero x then true else if iszero (pred x) then false else fix ff (pred (pred x));このfixの場合、正格評価戦略を取ると、展開が終わらなくなる。Wikipedia: 不動点コンビネータ(Fix Combinator)なども参照。 12
    13. 13. General Recursion・Exercise 11.11.1 equal equal : Nat -> Nat -> Bool equal = fix ffeq ffeq : (Nat -> Nat -> Bool) -> Nat -> Nat -> Bool ffeq = λeq: Nat -> Nat -> Bool . λx: Nat . λy: Nat . if and (iszero x) (iszero y) then true else if or (iszero x) (iszero y) then false else eq (pred x) (pred x); 13
    14. 14. General Recursion・Exercise 11.11.1 plus plus : Nat -> Nat -> Nat plus = fix ffpl ffpl : (Nat -> Nat -> Nat) -> Nat -> Nat -> Nat ffpl = λpl: Nat -> Nat -> Nat . λx: Nat . λy: Nat . if iszero y then x else pl (succ x) (pred y); 14
    15. 15. General Recursion・Exercise 11.11.1 times times : Nat -> Nat -> Nat times = fix fftm fftm : (Nat -> Nat -> Nat) -> Nat -> Nat -> Nat fftm = λtm: Nat -> Nat -> Nat . λx: Nat . λy: Nat . if iszero y then 0 else plus x (tm x (pred y)); 15
    16. 16. General Recursion・Exercise 11.11.1 factorial factorial : Nat -> Nat factorial = fix fffc fffc : (Nat -> Nat) -> Nat -> Nat fffc = λfc: Nat -> Nat . λn: Nat . if iszero n then 1 else times n (fc (pred n)); 16
    17. 17. General Recursion・11.11 General Recursion letrec letrecは以下の定義の構文糖衣 letrec x: T1 = t1 in t2 let x = fix (λx: T1 . t1) in t2 letrec iseven : Nat -> Bool = λx: Nat . if iszero x then true else if iszero (pred x) then false else iseven (pred (pred x)) in iseven 7; 17
    18. 18. Lists・11.12 Lists 型Tの要素を持つList型を定義する List a ::= nil ¦ Cons a List [Defenition of List] リストの定義からいくつか v ::= ... nil[T] cons[T] v v Γ-¦ t1:T1 Γ-¦ t2:List T1 [T-Cons] Γ-¦ cons[T1] t1 t2 : List T1 18

    ×