PLT - Lecture 10 (1)

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

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

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

๐Ÿงญ 1. ํ•จ์ˆ˜์  ์ ‘๊ทผ (Functional Approach)
๐Ÿ’ก ํ•ต์‹ฌ ๊ฐœ๋…:
๋ณ€์ˆ˜(์ด๋ฆ„)๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

๋ณ€์ˆ˜ ์ด๋ฆ„์€ ํ™˜๊ฒฝ(environment)์„ ํ†ตํ•ด ๊ทธ ๊ฐ’์— ์—ฐ๊ฒฐ๋œ๋‹ค.

ํ•œ ๋ฒˆ ๋ฐ”์ธ๋”ฉ๋œ ๊ฐ’์€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค. ์ƒํƒœ(state)๋ผ๋Š” ๊ฐœ๋…์ด ์—†๋‹ค.

๐Ÿงฑ ์ž‘๋™ ๊ตฌ์กฐ:
racket

(define env (list (bind 'x (numV 3)) (bind 'y (numV 5))))
(lookup 'x env) โ†’ (numV 3)

๐Ÿ“Œ ํŠน์ง•:
๋งค๋ฒˆ ์ƒˆ๋กœ์šด env๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฐ”์ธ๋”ฉ์„ ํฌํ•จ์‹œํ‚จ๋‹ค.

์ด์ „ ๋ฐ”์ธ๋”ฉ์€ ๋‚จ์•„ ์žˆ์–ด๋„ ์ ‘๊ทผ๋˜์ง€ ์•Š๋Š”๋‹ค (์ƒˆ ๋ฐ”์ธ๋”ฉ์ด ์•ž์— ์žˆ์Œ).

์ˆœ์ˆ˜ ํ•จ์ˆ˜ ์Šคํƒ€์ผ: ์ž…๋ ฅ๋งŒ์ด ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ์ •ํ•˜๋ฉฐ, ์™ธ๋ถ€ ์„ธ๊ณ„์˜ ๋ณ€ํ™”๊ฐ€ ์—†์Œ.

๐Ÿ” 2. ์ˆœ์ฐจ ์‹คํ–‰๊ณผ ์ƒํƒœ ๋„์ž…
์™œ ์ƒํƒœ๊ฐ€ ํ•„์š”ํ•ด์กŒ๋Š”๊ฐ€?
racket

(begin
  (set! x 5)
  (+ x 1))

์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ด์ „ ํ‘œํ˜„์‹์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค์Œ ํ‘œํ˜„์‹์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ๊ตฌ์กฐ์—์„œ๋Š”,
์ƒํƒœ(state)๋ผ๋Š” ๊ฐœ๋…์ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•ด์ง„๋‹ค.

โœจ ๋ณ€ํ™”๋œ ํ‰๊ฐ€ ๋ฐฉ์‹:
racket

M(expr, env, store) โ†’ (val, store')

expr์€ ํ‘œํ˜„์‹

env๋Š” ์ด๋ฆ„ โ†’ ์œ„์น˜ ๋งคํ•‘

store๋Š” ์œ„์น˜ โ†’ ๊ฐ’ ๋งคํ•‘

๊ฒฐ๊ณผ๋Š” ๊ฐ’๊ณผ ํ•จ๊ป˜ ์ƒˆ๋กœ์šด ์ƒํƒœ(store')๋ฅผ ๋ฐ˜ํ™˜

๐Ÿง  3. Environment vs Store
๊ตฌ์„ฑ ์—ญํ• 
Environment symbol โ†’ location (๋ณ€์ˆ˜ ์ด๋ฆ„์„ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋กœ)
Store location โ†’ value (์ฃผ์†Œ๋ฅผ ์‹ค์ œ ๊ฐ’์œผ๋กœ)

๊ฐ’์„ ์–ป๊ธฐ ์œ„ํ•ด์„œ๋Š”:
symbol โ†’ location (via lookup) โ†’ location โ†’ value (via fetch)

๐Ÿ“ฆ 4. Store์™€ Cell ๊ตฌ์กฐ
store๋Š” ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„๋˜๋ฉฐ, ๊ฐ ์›์†Œ๋Š” (cell loc val) ํ˜•์‹:
racket

(list (cell 0 (numV 3)) (cell 1 (numV 5)))

cell: ์œ„์น˜(location)์™€ ๊ฐ’(value)์˜ ์Œ

numV: ์ˆซ์ž ๊ฐ’์„ ๊ฐ์‹ผ ํƒ€์ž…

์ด๋ ‡๊ฒŒ ๋‚˜๋ˆ„๋Š” ์ด์œ : ๊ฐ’ ์ž์ฒด๋ณด๋‹ค ์œ„์น˜๋ฅผ ํ†ตํ•œ ์ ‘๊ทผ/์—…๋ฐ์ดํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ

๐Ÿ”„ 5. override-store โ€“ store ๊ฐฑ์‹ 
racket

(override-store (cell 1 (numV 10)) store)

์ž‘๋™ ๋ฐฉ์‹:
override-store๋Š” store ๋ฆฌ์ŠคํŠธ ์•ž์— ์ƒˆ๋กœ์šด cell์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

์ด๋Š” ๊ธฐ์กด cell์„ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ ,
์ƒˆ๋กœ์šด ๋ฐ”์ธ๋”ฉ์„ ์šฐ์„ ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์ด๋‹ค.

์˜ˆ์‹œ:
racket

(override-store (cell 1 (numV 10))
                (list (cell 0 (numV 3)) (cell 1 (numV 5))))
โ†’ (list (cell 1 (numV 10)) (cell 0 (numV 3)) (cell 1 (numV 5)))

location 1์— ๋Œ€ํ•ด ๋‚˜์ค‘์— fetch๋ฅผ ํ•˜๋ฉด ํ•ญ์ƒ ๋งจ ์•ž์˜ 10์ด ๋‚˜์˜ด

๊ธฐ์กด (cell 1 (numV 5))๋Š” ๋‚จ์•„์žˆ์ง€๋งŒ ๋ฌด์‹œ๋จ

๐Ÿ” 6. fetch โ€“ ๊ฐ’ ๊ฒ€์ƒ‰ ํ•จ์ˆ˜
์ •์˜ ์š”์•ฝ:
racket

(fetch loc store)

โ†’ store๋ฅผ ์•ž์—์„œ๋ถ€ํ„ฐ ๊ฒ€์‚ฌํ•ด loc์ด ์ผ์น˜ํ•˜๋Š” ์ฒซ cell์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜
์ž‘๋™ ๋ฐฉ์‹:
racket

define (fetch [loc : Location] [store : Store]) : Value
  (cond
    [(empty? store) (error "not found")]
    [(equal? loc (cell-location (first store)))
     (cell-val (first store))]
    [else (fetch loc (rest store))]
	)]))

โœ… ์ž…๋ ฅ: loc๊ณผ store

โœ… ์ถœ๋ ฅ: value

โœ… ๋™์ž‘: ์ฒ˜์Œ ์ผ์น˜ํ•˜๋Š” ์…€์—์„œ ๊ฐ’ ๋ฆฌํ„ด (๋ฎ์–ด์“ฐ๊ธฐ์ฒ˜๋Ÿผ ๋™์ž‘)

๐Ÿงฉ 7. ์ „์ฒด ํ๋ฆ„ ์˜ˆ์‹œ๋กœ ์š”์•ฝ
racket

(set! x 5)
(set! x (+ x 1))
x

set! x 5

lookup x env โ†’ loc = 0

store์— (cell 0 (numV 5)) ์ถ”๊ฐ€๋จ

(+ x 1)

lookup x env โ†’ loc = 0

fetch 0 store โ†’ 5

๊ฒฐ๊ณผ: 6

override-store๋กœ cell 0 (numV 6) ์ถ”๊ฐ€๋จ

x

fetch 0 store โ†’ ๊ฐ€์žฅ ์•ž์˜ cell 0 (numV 6) ์„ ํƒ

โœ… ์ตœ์ข… ์š”์•ฝ
๊ฐœ๋… ์š”์ 
Functional Approach ๋ฐ”์ธ๋”ฉ์€ ๋ถˆ๋ณ€, ์ƒํƒœ ์—†์Œ
Sequential State ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ๋‹ค์Œ ๊ณ„์‚ฐ์— ์˜ํ–ฅ
Environment name โ†’ location
Store location โ†’ value (cell ๋‹จ์œ„)
override-store ๊ฐ™์€ ์œ„์น˜์— ์ƒˆ ๊ฐ’์„ "์•ž์— ๋ถ™์—ฌ" ์šฐ์„ ์ˆœ์œ„ ๋ถ€์—ฌ
fetch ์ฒ˜์Œ ์ผ์น˜ํ•˜๋Š” ์œ„์น˜์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜

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

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

comment-user-thumbnail
2025๋…„ 6์›” 7์ผ

GPT๋กœ ๊ณต๋ถ€ํ•˜๊ณ  ์ •๋ฆฌํ•˜๊ธฐ ์‹œ์ž‘

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ