
๐งญ 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 ์ฒ์ ์ผ์นํ๋ ์์น์ ๊ฐ์ ๋ฐํ
GPT๋ก ๊ณต๋ถํ๊ณ ์ ๋ฆฌํ๊ธฐ ์์