Upgrade to Pro — share decks privately, control downloads, hide ads and more …

限定継続渡し変換と対応する型システム

 限定継続渡し変換と対応する型システム

Takatomo Torigoe

February 06, 2012
Tweet

More Decks by Takatomo Torigoe

Other Decks in Programming

Transcript

  1. ܧଓ(Continuation) • ܧଓ ʹ ͜Ε͔ΒߦΘΕΔ༧ఆͷܭࢉ • ίϯτϩʔϧΦϖϨʔλ ʹ ܧଓΛૢ࡞ †

    ؔ਺ܕݴޠʹ͓͚Δ༻ޠ † खଓ͖ܕݴޠͰ͍͏ͱ͜Ζͷgotoจ • Ԡ༻ɿ୤ग़ͱ࠶ೖ ɹɹɹίϧʔνϯ ɹɹɹόοΫτϥοΫ ɹɹɹϚϧνλεΫ
  2. ݶఆܧଓ(Delimited Continuation) • ੍ޚޮՌ ʹ ܧଓͷૢ࡞ʹΑΔӨڹ † ੍ޚޮՌ͸ڧྗͳ୅ΘΓʹةݥੑ͕͋Δ • ݶఆܧଓ

    ʹ ੍ޚޮՌͷٴͿൣғΛݶఆ • ຊݚڀͰओʹѻ͏ܭࢉϞσϧ͸ λS ܭࢉ ʹ λܭࢉ ʴ ɹɹɹɹɹίϯτϩʔϧΦϖϨʔλshift/reset
  3. ߏจͱ؆໿نଇ • λܭࢉͷߏจʹ௥Ճ Sα.t † shift ʹΑͬͯܧଓͷม਺ α Λந৅ t

    † resetʹΑͬͯܧଓͷൣғΛݶఆ • λܭࢉͷ؆໿نଇʹ௥Ճ E[Sα.t] → t{α := λx. E[x] } † ݶఆܧଓ E ͷ୅ೖ v → v † ໾ׂΛՌͨͨ͠resetΛࣺͯΔ
  4. ैདྷͷܕγεςϜ . . . Γ, α : V/X → W/X

    Y t : Y Z Γ W Sα.t : V Z Γ V t : V W Γ X t : W X Γ Z s : V/X → W/Y A Γ Y t : V Z Γ X st : W A • CPS(ܧଓ౉͠)ม׵ͨ͠ઌͷλܭࢉʹ͓͚Δ ܕ෇͚ΛҾ͖໭ͯ͠දهΛมߋͨ͠΋ͷ
  5. ϝΠϯΞΠσΟΞ • ෆཁͳܕ৘ใΛ࡟আͯ͠ɼܕͷछྨΛ෼ྨ † ୅ΘΓʹܕ෇͚نଇ͕ෳࡶԽ T ::= ܕ V λܕ

    (V ⇒ V ) ↓ V S ܕ V ::= B | V → T λܕ • λ ܕ ʹ λ ʹΑΔந৅ʹରԠ • S ܕ ʹ shiftʹΑΔந৅ʹରԠ
  6. ܕ෇͚Ͱ͖ΔΑ͏ʹͳΔྫ (λf. · · · mapRecip ( f (1) (Sα.t))

    · · · mapRecip ( f (2) (Sα.t)) · · · ) sort • sort͕୅ೖ͞ΕΔೋΧॴͷf ͷܕ෇͚ʹண໨ Y f : [Int]/X → [Int]/X Y † ܕ෇͚نଇΑΓ৚݅(1) X = [Ratio]ɼ(2) X = [Double] † ಉҰͷଋറม਺ʹର͢Δ৚݅ͳͷͰಉ࣌ʹຬͨͤͳ͍ X, Y Λ࡟আ ˝ λܕͷܗʹ f : [Int] → [Int]
  7. ৽ͨʹఏҊ͢ΔܕγεςϜ Γ Z s : V/X → W/Y A Γ

    Y t : V Z Γ X st : W A ద༻stͷܕ෇͚نଇ ˝ ࣣͭʹ৔߹෼͚ Γ s : V → T Γ t : V Γ st : T Γ s : V → W Γ t : V ⇒ X ↓ A Γ st : W ⇒ X ↓ A Γ s : V → (W ⇒ X ↓ Y ) Γ t : V ⇒ Y ↓ A Γ st : W ⇒ X ↓ A . . .
  8. ରԠ͢ΔDCPS(ݶఆܧଓ౉͠)ม׵ [[st]] = λk.[[s]](λx.[[t]](λy.(xy)k)) ద༻stͷม׵ࣜ ˝ ࣣͭʹ৔߹෼͚ [[st]] = [[s]][[t]]

    [[st]] = λk.[[t]](λx.k([[s]]x)) [[st]] = λk.[[t]](λx.([[s]]x)k) . . . • CPSม׵͕ड͚౉͍ͯͨ͠ܧଓͷ͏ͪ ݶఆܧଓ͚ͩΛબผͨ͠ม׵
  9. ఏҊ͢ΔܕγεςϜͷ҆શੑ • ʦ ܕͷอଘ ʧ Γ t : T ͔ͭt

    → t ͳΒ͹ɼΓ t : Tɽ • ʦ ܭࢉͷਐߦ ʧ 1. t : V ͳΒ͹ɼ t͸஋Ͱ͋Δ͔ɼt → t ͱͳΔt ͕ଘࡏ͢Δɽ 2. t : V ⇒ W ↓ X ͳΒ͹ɼ ೚ҙͷ E[t] : X ͳΔE ʹରͯ͠ɼ E[t] → sͱͳΔs͕ଘࡏ͢Δɽ † ิ୊Λ༻ҙͯ͠ɼݶఆܧଓͷ௕͞ʹΑΔؼೲ๏
  10. ఏҊ͢ΔܕγεςϜͷ݈શੑ • ʦ ܕ෇͚ͷ݈શੑ ʧ Γ t : T ͳΒ͹ɼ[[Γ]]

    [[t]] : [[T ]]ɽ • ʦ ؆໿ͷ݈શੑ ʧ Γ t : T ͔ͭt → t ͳΒ͹ɼ( [t] )# →+ ( [t ] )#ɽ † ม׵( [ ] )# ͸DCPSม׵[[ ]]Λมܗͨ͠΋ͷ † ิ୊Λ༻ҙͯ͠ɼݶఆܧଓͷ௕͞ʹΑΔؼೲ๏ † ͜ͷఆཧΑΓɼܕ෇͖߲ͷڧਖ਼نԽੑ΋ূ໌
  11. ܕͷछྨͱ੍ޚޮՌ • ʦ ਖ਼نܗ ʧ ैདྷͷܕγεςϜͰ͸ෆ੒ཱ t : T Ͱ͋Δͱ͖ɼ

    1. T = BͳΒ͹ɼt →∗ cɽ 2. T = W → S ͳΒ͹ɼt →∗ λx.t1 ɽ 3. T = W ⇒ X ↓ AͳΒ͹ɼt →∗ E[Sα.t1 ]ɽ † ิ୊ͱڧਖ਼نԽੑΑΓূ໌ • ܭࢉΛਐΊΔͱ͍ͣΕ λ ܕͷ߲͸ɼλ ந৅ͷਖ਼نܗʹʢ੍ޚޮՌͳ͠ʣ S ܕͷ߲͸ɼS ந৅ͷਖ਼نܗʹʢ੍ޚޮՌ͋Γʣ