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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

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

Avatar for Takatomo Torigoe

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 ந৅ͷਖ਼نܗʹʢ੍ޚޮՌ͋Γʣ