Slide 1

Slide 1 text

( c a l l / c c ( l a m b d a ( c o n t ) ( c o n t ஌ ݟ ) ) ) 2 0 1 5 ೥ 1 0 ݄ 1 8 ೔ ୈ 2 ճ O U C C LT ձ

Slide 2

Slide 2 text

͓ · ͑ ͔ • ͢͢͠ • ΞϨܥ • űwiűűer: @susisu2413 • GitHub: susisu • Scheme ૉਓͰ͢

Slide 3

Slide 3 text

ܧ ଓ • "ܧଓʢ͚͍ͧ͘ɺcontinuationʣͱ͸ɺϓϩάϥϜͷ ࣮ߦʹ͓͍ͯ͋Δ࣌఺ʹ͓͍ͯධՁ͞Ε͍ͯͳ͍࢒Γ ͷϓϩάϥϜʢthe rest of the programʣΛҙຯ͢Δ΋ ͷͰ͋Γɺखଓ͖ʢprocedureʣͱͯ͠දݱ͞ΕΔ΋ ͷͰ͋Δɻ" ܧଓ - Wikipedia https://ja.wikipedia.org/wiki/ %E7%B6%99%E7%B6%9A

Slide 4

Slide 4 text

ࡴ െ ͱ ͠ ͨ εϥ Π υ ʹ S ࣜ ͕ (+ 1 2)

Slide 5

Slide 5 text

2 ͔ Β ݟ ͨ ܧ ଓ (+ 1 (...))

Slide 6

Slide 6 text

ϥϜ μ ࣜ Ͱ ͸ (lambda (x) (NEXT (+ 1 x) )) NEXT ͸ͦ͜ͰධՁΛऴྃ͢ΔԾ૝ͷॲཧ

Slide 7

Slide 7 text

c a l l / c c • ུͣ͞ʹݴ͏ͱ call-with- current-continuation • ݱࡏͷܧଓΛҾ਺ͱͯ͠, ༩͑ΒΕͨؔ਺Λݺͼग़͢ • ܧଓ͸ͨͩͷؔ਺ͳͷͰ, อଘ͓͍ͯͯ͠, ผͷ৔ॴ ͔Βݺͼग़͢͜ͱ΋Մೳ

Slide 8

Slide 8 text

(+ 1 2)

Slide 9

Slide 9 text

2 Λ c a l l / c c ͷ ࣜ Ͱ ஔ ͖ ׵ ͑ͯ Έ Δ (+ 1 (call/cc (lambda (cont) (cont 2)) ))

Slide 10

Slide 10 text

c a l l / c c ͷ Ҿ ਺ ( ؔ ਺ ) ʹ ౉ ͞ Ε Δ ܧ ଓ (+ 1 (...))

Slide 11

Slide 11 text

ϥϜ μ ࣜ Ͱ ͸ (lambda (x) (NEXT (+ 1 x) ))

Slide 12

Slide 12 text

ͭ · Γ ͜͏ ͍ ͏ ͜ ͱ (+ 1 ( (lambda (cont) (cont 2)) (lambda (x) (NEXT ( (+ 1 x) ))) ))

Slide 13

Slide 13 text

ධ Ձ Λ ਐ Ί Δ (+ 1 (NEXT (+ 1 2) ))

Slide 14

Slide 14 text

Slide 15

Slide 15 text

Կ ʹ ࢖ ͑Δ ͷ ͔ • ϧʔϓ୤ग़ (break) • ྫ֎ॲཧ (throw) • ίϧʔνϯ (yield) • return, goto, etc. • ཁ͸ಥೖͱ୤ग़

Slide 16

Slide 16 text

ͭΑ ͍

Slide 17

Slide 17 text

࣮ ૷ ͠ ͨ

Slide 18

Slide 18 text

Ͳ ͏ ͍ ͏ ࣮ ૷ • https://github.com/susisu/js-sandbox/blob/master/ continuation/src/v2.js • AST ΠϯλϓϦλ in JavaScript • جૅ͸લճͷ LT Ͱൃදͨ͠΋ͷͷྲྀ༻ http://susisu.hatenablog.com/entry/2015/07/12/142250 • Scheme ͷྫΛ͍͔ͭ͘ࢼͨ͠ͱ͜Ζظ଴௨Γʹಈ࡞ͨ͠ ͷͰɺͨͿΜ্ख͍͍ͬͯ͘Δ

Slide 19

Slide 19 text

ܧ ଓ ͷ ੜ ੒ ( ୯ ७ Խ ͠ ͨ ΋ ͷ ) • ࣜ Expr • ࣜͷධՁ eval : Expr → Res ― ݫີʹ͸؀ڥ΋ඞཁ • ධՁ݁Ռ Res = Ok Val ― ੒ޭ | Cont Val (Res → Res) ― ܧଓ | Next Val ― ධՁऴྃ

Slide 20

Slide 20 text

ܧ ଓ ͷ ੜ ੒ • ྫ͑͹ɺෳ਺ͷࣜΛॱ൪ʹධՁ͢ΔΑ͏ͳࣜ e = (e1 : Expr, e2 : Expr, ..., eN : Expr) : Expr r = eval e, ri = eval ei ― ධՁ݁Ռ • ri = Ok v 㱺 ei+1 Ҏ߱ͷධՁΛଓ͚Δ, i = N ͳΒ͹ r = Ok v • Cont f c 㱺 r = Cont f ((λx → eval ([r1 , ..., ri-1 ,] x, ei+1 , ..., eN )) ○ c) • Next v 㱺 r = Next v

Slide 21

Slide 21 text

ܧ ଓ ͷ ੜ ੒ • τοϓϨϕϧʹ͸த਎ͷࣜͷධՁ݁Ռ͕ Ok v ͳΒ͹ Next v ͱͳΔࣜΛஔ͍͓ͯ͘ • eval “(call/cc f)” = Cont f (λx → x) • (call/cc f) ΛؚΉࣜΛධՁ͢Δͱ Cont f c ͕ಘΒΕΔ • ࠷ޙʹ c (f c) Λܭࢉ͢Ε͹ (ͦͷ͏ͪ) ஋͕ग़ͯ͘Δ

Slide 22

Slide 22 text

?

Slide 23

Slide 23 text

D E M O

Slide 24

Slide 24 text

ܧ ଓ ͸ ྗ