PLT - Lecture 10 (part.2)

๋กœ๋‘๋งˆ๋‹ˆยท2025๋…„ 6์›” 13์ผ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์–ด๋ก 

๋ชฉ๋ก ๋ณด๊ธฐ
5/6
post-thumbnail

๐Ÿ”ท Result ๊ธฐ๋ฐ˜ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ์ „์ฒด ๊ตฌ์กฐ ๋ฐ ๋™์ž‘ ์›๋ฆฌ

๐Ÿ“Œ 1. ๊ธฐ์กด ๋ฌธ์ œ์ : ๊ฐ’๋งŒ ๋ฆฌํ„ดํ•˜๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ํ•œ๊ณ„

๊ธฐ์กด์˜ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ๋‹ค์Œ์ฒ˜๋Ÿผ ์˜ค์ง ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค

racket

(define (interp [expr : ExprC] [env : Env]) : Value
  ...)

ํ•˜์ง€๋งŒ ์•„๋ž˜ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ๋Š” "๊ฐ’๋งŒ"์œผ๋ก  ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค:

racket

(set x 3)
(set x 5)

์œ„ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ๋ณ€์ˆ˜์— ๊ฐ’์„ ์žฌํ• ๋‹นํ•˜๋Š” mutation (์ƒํƒœ ๋ณ€ํ™”) ๋ฅผ ํ‘œํ˜„ํ•˜๋ ค๋ฉด, ๋‹จ์ˆœํžˆ ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ•ด์„œ๋Š” ๋ณ€๊ฒฝ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ(store) ๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๐Ÿ†• 2. ํ•ด๊ฒฐ์ฑ…: ๊ฒฐ๊ณผ(Result)๋ฅผ ๊ฐ’๊ณผ store๋กœ ๊ตฌ์„ฑ

โœ… Result ํƒ€์ž… ๋„์ž…
racket

(define-type Result
  [vs (v : Value) (s : Store)])

v: ๊ณ„์‚ฐ ๊ฒฐ๊ณผ (Value)

s: ๊ณ„์‚ฐ ํ›„์˜ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ (Store)

vs๋Š” value์™€ store๋ฅผ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ํฌ์žฅํ•œ ๊ฒฐ๊ณผ

๐Ÿง  3. ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ๋ณ€๊ฒฝ

โœ… ์ด์ „
racket

(define (interp expr env) : Value)

โœ… ์ดํ›„ (store ์ถ”๊ฐ€ + ๊ฒฐ๊ณผ ํƒ€์ž… ๋ณ€๊ฒฝ)
racket

(define (interp [expr : ExprC] [env : Env] [store : Store]) : Result)

์ด์ œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” store๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„, ๊ณ„์‚ฐ๋œ value์™€ store๋ฅผ ํ•จ๊ป˜ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿงฉ 4. ๊ฐ ํ‘œํ˜„์‹ ์ผ€์ด์Šค๋ณ„ ๊ตฌํ˜„ ๋ณ€๊ฒฝ

โœ… numC (์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด)
racket

[numC (n)
  (vs (numV n) store)]

์ˆซ์ž๋ฅผ ๊ทธ๋Œ€๋กœ numV๋กœ ๊ฐ์‹ธ๊ณ , store๋Š” ๋ฐ”๋€Œ์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜.

โœ… idC (๋ณ€์ˆ˜)
racket

[idC (n)
  (vs (fetch (lookup n env) store) store)]

env๋กœ๋ถ€ํ„ฐ ๋ณ€์ˆ˜ n์˜ ์œ„์น˜๋ฅผ lookup

๊ทธ ์œ„์น˜์—์„œ ๊ฐ’์„ fetch

๊ฐ’์€ ๋ฐ˜ํ™˜ํ•˜๋˜, store๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€

โœ… lamC (ํ•จ์ˆ˜ ์ •์˜)
racket

[lamC (a b)
  (vs (closV a b env) store)]

lambda๋Š” ํด๋กœ์ €๋กœ ํ‰๊ฐ€๋จ: (closV arg body env)

์ •์˜ ๋‹น์‹œ์˜ ํ™˜๊ฒฝ๋„ ํ•จ๊ป˜ ์ €์žฅํ•ด์•ผ ๋‚˜์ค‘์— ์ ์šฉ ๊ฐ€๋Šฅ

store๋Š” ๋ณ€ํ™” ์—†์Œ

โœ… seqC (์ˆœ์ฐจ ์‹คํ–‰)
racket

[seqC (e1 e2)
  (type-case Result (interp e1 env store)
    [vs (v1 s1)
      (interp e2 env s1)])]

e1์„ ๋จผ์ € ํ‰๊ฐ€ํ•˜์—ฌ ๊ฒฐ๊ณผ store์ธ s1์„ ์–ป์Œ

s1์„ ๋ฐ˜์˜ํ•˜์—ฌ e2๋ฅผ ํ‰๊ฐ€

์ตœ์ข… ๊ฒฐ๊ณผ๋Š” e2์˜ ํ‰๊ฐ€ ๊ฒฐ๊ณผ

โœ… setC (๊ฐ’ ํ• ๋‹น)
racket

[setC (var val)
  (type-case Result (interp val env store)
    [vs (v s)
      (let ([loc (lookup var env)])
        (vs v (override-store (cell loc v) s)))])]

val์„ ๋จผ์ € ํ‰๊ฐ€ํ•ด ๊ฐ’ v์™€ store s๋ฅผ ์–ป์Œ

๋ณ€์ˆ˜ var์˜ ์œ„์น˜๋ฅผ lookup

store์— ์ƒˆ๋กœ์šด cell (loc โ†’ v)์„ ์ถ”๊ฐ€๋กœ ๋ฎ์–ด์“ฐ๊ธฐ (mutation)

์—…๋ฐ์ดํŠธ๋œ store์™€ ํ•จ๊ป˜ ๊ฐ’ v ๋ฐ˜ํ™˜

โœ… plusC (๋ง์…ˆ)
racket

[plusC (l r)
  (type-case Result (interp l env store)
    [vs (vl sl)
      (type-case Result (interp r env sl)
        [vs (vr sr)
          (vs (num+ vl vr) sr)])])]

l์„ ๋จผ์ € ํ‰๊ฐ€ํ•˜๊ณ  store๊ฐ€ sl๋กœ ๋ฐ”๋€œ

๊ทธ ์ƒํƒœ์—์„œ r์„ ํ‰๊ฐ€ํ•ด์•ผ ํ•˜๋ฏ€๋กœ sl์„ ๋„˜๊น€

์ตœ์ข… ๊ฒฐ๊ณผ๋Š” vl + vr, store๋Š” sr๋กœ ์—…๋ฐ์ดํŠธ๋œ ์ƒํƒœ

โœ… appC (ํ•จ์ˆ˜ ํ˜ธ์ถœ)
racket

[appC (f a)
  (type-case Result (interp f env store)
    [vs (vf sf)
      (type-case Result (interp a env sf)
        [vs (va sa)
          (let ([loc (new-loc)])
            (interp (closV-body vf)
                    (extend-env (bind (closV-arg vf) loc)
                                (closV-env vf))
                    (override-store (cell loc va) sa)))]))]

f๋ฅผ ํ•ด์„ํ•˜์—ฌ ํด๋กœ์ € vf์™€ store sf ํš๋“

a๋ฅผ ํ•ด์„ํ•˜์—ฌ ์ธ์ž๊ฐ’ va์™€ store sa ํš๋“

new-loc์„ ์ƒ์„ฑํ•˜์—ฌ ์ธ์ž ์ด๋ฆ„ โ†’ ์œ„์น˜ ๋ฐ”์ธ๋”ฉ ์ถ”๊ฐ€

ํ™˜๊ฒฝ๊ณผ store๋ฅผ ํ™•์žฅํ•œ ํ›„ ํด๋กœ์ € ๋ณธ๋ฌธ ์‹คํ–‰

๐Ÿงพ 5. ํ•ต์‹ฌ ์—ฐ์‚ฐ ์š”์•ฝ

์—ฐ์‚ฐ ์„ค๋ช…
lookup name env name โ†’ location (Environment)
fetch loc store location โ†’ value (Store)
override-store store์— ์ƒˆ๋กœ์šด cell ์ถ”๊ฐ€ (์•ž์— ๋ฎ์–ด์“ฐ๊ธฐ์ฒ˜๋Ÿผ ๋ถ™์ž„)
extend-env ํ™˜๊ฒฝ์— ์ƒˆ๋กœ์šด ๋ฐ”์ธ๋”ฉ ์ถ”๊ฐ€
new-loc ์ƒˆ๋กœ์šด ์œ„์น˜ (๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ) ์ƒ์„ฑ ํ•จ์ˆ˜

๐Ÿง  ์ •๋ฆฌ

Result ํƒ€์ž… ๋„์ž…์€ โ€œ๊ฐ’ + ์ƒํƒœ(store)โ€ ๋™์‹œ ์ถ”์ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.

์ด์ œ ๋ชจ๋“  ExprC๋Š” store๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ , ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š” ๋™์‹œ์— ์ƒํƒœ ๋ณ€๊ฒฝ ๊ฒฐ๊ณผ๋ฅผ ํ•จ๊ป˜ ์ถœ๋ ฅํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด mutable ์ƒํƒœ, ๋ณ€์ˆ˜ ์žฌํ• ๋‹น, ์ˆœ์ฐจ์  ์‹คํ–‰ ๋“ฑ์ด ์ •ํ™•ํžˆ ํ•ด์„ ๊ฐ€๋Šฅํ•˜๋‹ค.

profile
ํ•ด์ ์™•์ด ๋  ์‚ฌ๋‚˜์ด

0๊ฐœ์˜ ๋Œ“๊ธ€