Skip to content

Commit

Permalink
update: lesson_08.md
Browse files Browse the repository at this point in the history
  • Loading branch information
netpyoung committed Jan 27, 2024
1 parent 95eef0d commit e4df964
Showing 1 changed file with 24 additions and 23 deletions.
47 changes: 24 additions & 23 deletions src/ch03/lesson_08.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@

## ๋งคํฌ๋กœ๋Š” ๊ฐ’์ด ์•„๋‹Œ ํผ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค

:TODO(pyoung)
๋งคํฌ๋กœ ๋ณธ์ฒด๋Š” ํ‰๊ฐ€๋  ํผ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ๋ง๋กœ ํ•˜์ž๋ฉด, ๋งคํฌ๋กœ์˜ ๋ณธ์ฒด๋กœ ๊ฐ’์ด ์•„๋‹Œ ํผ์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์Šคํ”„๊ฐ€ ๋งคํฌ๋กœ์˜ ํ˜ธ์ถœ์„ ํ‰๊ฐ€ํ• ๋•Œ, ์ด๋Š” ์šฐ์„  ๋งคํฌ๋กœ ๋ณธ์ฒด ์ •์˜๋ฅผ ํ‰๊ฐ€ํ•˜๊ณ , ์ฒซ๋ฒˆ์งธ ํ‰๊ฐ€์˜ ๊ฒฐ๊ณผ๋ฅผ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค (๋น„๊ตํ•˜์—ฌ, ํ•จ์ˆ˜์˜ ๋ณธ์ฒด๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค) ์—ฌ๊ธฐ ์—ฌ๋Ÿฌ๋ถ„์ด ๊ฐ€์žฅ ์•Œ๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์„ ์„ค๋ช…ํ•ด์ฃผ๋Š” ๊ฐ„๋‹จํ•œ ๋งคํฌ๋กœ ์Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค:
๋งคํฌ๋กœ ๋ณธ์ฒด๋Š” ํ‰๊ฐ€๋  ํผ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ง๋กœ ํ•˜์ž๋ฉด, ๋งคํฌ๋กœ์˜ ๋ณธ์ฒด๋กœ ๊ฐ’์ด ์•„๋‹Œ ํผ์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์Šคํ”„๊ฐ€ ๋งคํฌ๋กœ์˜ ํ˜ธ์ถœ์„ ํ‰๊ฐ€ํ• ๋•Œ, ์ด๋Š” ์šฐ์„  ๋งคํฌ๋กœ ๋ณธ์ฒด ์ •์˜๋ฅผ ํ‰๊ฐ€ํ•˜๊ณ , ์ฒซ๋ฒˆ์งธ ํ‰๊ฐ€์˜ ๊ฒฐ๊ณผ๋ฅผ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค (์ด์— ๋น„ํ•ด, ํ•จ์ˆ˜์˜ ๋ณธ์ฒด๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค).

๋‹ค์Œ์œผ๋กœ ์ €ํฌ๊ฐ€ ์•Œ์•„์•ผ ํ•  ๋Œ€๋ถ€๋ถ„์˜ ๋‚ด์šฉ์„ ์„ค๋ช…ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ฐ„๋‹จํ•œ ๋งคํฌ๋กœ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค:

``` lisp
(defmacro setq-literal (place literal)
Expand All @@ -37,33 +38,33 @@ a
;;=> (B)
```

`setq-literal`๋Š” ์ธ์ˆ˜๊ฐ€ ํ‰๊ฐ€๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๋ฉด ๋งˆ์น˜ `setq`์ฒ˜๋Ÿผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค(SETQ๋Š” ์ด์˜ ๋‘๋ฒˆ์งธ ์ธ์ˆ˜๋ฅผ ํ‰๊ฐ€ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹ฌํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค). `SETQ-LITERAL`์˜ ๋ณธ์ฒด๋Š” ("์—ญ๋”ฐ์˜ดํ‘œ"๋ผ ๋งํ•˜๋Š”) `๋กœ ์‹œ์ž‘ํ•˜๋Š” ํผ์„ ์ง€๋…”์Šต๋‹ˆ๋‹ค. ์—ญ๋”ฐ์˜ดํ‘œ๋Š” ์—ญ๋”ฐ์˜ดํ‘œ๋œ ํผ์—์„œ ์‰ผํ‘œ๊ฐ€ ๋ณด์ธ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๋ฉด (ํผ์œผ๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ ๋ชจ๋“  ๊ฒƒ์˜ ํ‰๊ฐ€๋ฅผ ์ˆจ๊ธฐ๋Š”)๋”ฐ์˜ดํ‘œ์ฒ˜๋Ÿผ ํ–‰๋™ํ•ฉ๋‹ˆ๋‹ค.
`setq-literal`๋Š” ์ธ์ˆ˜๊ฐ€ ํ‰๊ฐ€๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๋ฉด ๋งˆ์น˜ `setq`์ฒ˜๋Ÿผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค(SETQ๋Š” ์ด์˜ ๋‘๋ฒˆ์งธ ์ธ์ˆ˜๋ฅผ ํ‰๊ฐ€ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹ฌํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค). `SETQ-LITERAL`์˜ ๋ณธ์ฒด๋Š” ("์—ญ๋”ฐ์˜ดํ‘œ"๋ผ ๋ถˆ๋ฆฌ๋Š”) `` ` ``๋กœ ์‹œ์ž‘ํ•˜๋Š” ํผ์„ ์ง€๋…”์Šต๋‹ˆ๋‹ค. ๋”ฐ์˜ดํ‘œ์ฒ˜๋Ÿผ ์—ญ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ๋ชจ๋“  ํผ์˜ ํ‰๊ฐ€๋ฅผ ์–ต์ œํ•˜์ง€๋งŒ, ์—ญ๋”ฐ์˜ดํ‘œ ์•ˆ์—์„œ ์‰ผํ‘œ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒฝ์šฐ๋Š” ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. ์‰ผํ‘œ ๋’ค์— ์˜ค๋Š” ์‹ฌ๋ณผ์€ ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์œ„์˜ `(SETQ-LITERAL A B)`๋ฅผ ํ˜ธ์ถœํ•จ์— ์žˆ์–ด, ๋ฌด์Šจ ์ผ์ด ๋ฒŒ์–ด์ง€๋Š”์ง€๊ฐ€ ์—ฌ๊ธฐ ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค:
๋”ฐ๋ผ์„œ ์œ„์˜ `(SETQ-LITERAL A B)`๋ฅผ ํ˜ธ์ถœํ•จ์— ์žˆ์–ด, ๋ฌด์Šจ ์ผ์ด ๋ฒŒ์–ด์ง€๋Š”์ง€ ์—ฌ๊ธฐ ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค:

1. PLACE๋ฅผ ์‹ฌ๋ณผ A์— bindํ•œ๋‹ค.
2. LITERAL๋ฅผ ์‹ฌ๋ณผ B์— bindํ•œ๋‹ค.
3. ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ฒ˜ `(SETQ ,PLACE ',LITERAL) ๋ณธ์ฒด๋ฅผ ํ‰๊ฐ€ํ•œ๋‹ค:
1. ์‹ฌ๋ณผ A์–ป๊ธฐ ์œ„ํ•ด PLACE๋ฅผ ํ‰๊ฐ€ํ•œ๋‹ค.
2. ์‹ฌ๋ณผ B์–ป๊ธฐ ์œ„ํ•ด LITERAL๋ฅผ ํ‰๊ฐ€ํ•œ๋‹ค.
3. ํผ (SETQ A 'B)๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
4. ํผ (SETQ A 'B)๋ฅผ ํ‰๊ฐ€ํ•œ๋‹ค.
1. ์‹ฌ๋ณผ `A`๋ฅผ `PLACE`์— ๋ฐ”์ธ๋“œํ•œ๋‹ค.
2. ์‹ฌ๋ณผ `B`๋ฅผ `LITERAL`์— ๋ฐ”์ธ๋“œํ•œ๋‹ค.
3. ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ฒ˜ `` `(SETQ ,PLACE ',LITERAL) `` ๋ณธ์ฒด๋ฅผ ํ‰๊ฐ€ํ•œ๋‹ค:
1. `PLACE`๋ฅผ ํ‰๊ฐ€ํ•˜์—ฌ ์‹ฌ๋ณผ `A`๋ฅผ ์–ป๋Š”๋‹ค.
2. `LITERAL`๋ฅผ ํ‰๊ฐ€ํ•˜์—ฌ ์‹ฌ๋ณผ `B`๋ฅผ ์–ป๋Š”๋‹ค.
3. ํผ `(SETQ A 'B)`๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
4. ํผ `(SETQ A 'B)`๋ฅผ ํ‰๊ฐ€ํ•œ๋‹ค.

๋ฐ˜ํ™˜๋œ ํผ์—์„œ ์—ญ๋”ฐ์˜ดํ‘œ๋‚˜ ์‰ผํ‘œ๋Š” ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. `SETQ-LITERAL` ํ˜ธ์ถœ์—์„œ `A`๋‚˜ `B`๊ฐ€ ํ‰๊ฐ€๋˜์ง€ ์•Š์ง€๋งŒ ์„œ๋กœ ๋‹ค๋ฅธ ์ด์œ  ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. `A`๋Š” `SETQ`์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ์— ํ‰๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. `B`๋Š” ๋งคํฌ๋กœ์— ์˜ํ•ด ๋ฐ˜ํ™˜๋œ ํผ์•ž์— ๋”ฐ์˜ดํ‘œ๊ฐ€ ๋ณด์ด๊ธฐ์— ํ‰๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค
๋ฐ˜ํ™˜๋œ ํผ์—์„œ ์—ญ๋”ฐ์˜ดํ‘œ๋‚˜ ์‰ผํ‘œ๋Š” ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. `SETQ-LITERAL` ํ˜ธ์ถœ์—์„œ `A`๋‚˜ `B`๊ฐ€ ํ‰๊ฐ€๋˜์ง€ ์•Š์ง€๋งŒ ์„œ๋กœ ๋‹ค๋ฅธ ์ด์œ  ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. `A`๋Š” `SETQ`์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ˆ˜์ด๊ธฐ์— ํ‰๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. `B`๋Š” ๋งคํฌ๋กœ์— ์˜ํ•ด ๋ฐ˜ํ™˜๋œ ํผ์•ž์— ๋”ฐ์˜ดํ‘œ(`'`)๊ฐ€ ๋ณด์ด๊ธฐ์— ํ‰๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

`(REVERSE-CONS NIL A)`์˜ ๋™์ž‘์€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค:

1. bind REST๋ฅผ ์‹ฌ๋ณผ NIL์— bindํ•œ๋‹ค.
2. bind FIRST๋ฅผ ์‹ฌ๋ณผ A์— bindํ•œ๋‹ค.
3. ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ฒ˜, `(CONS ,FIRST ,REST) ๋ณธ์ฒด๋ฅผ ํ‰๊ฐ€ํ•œ๋‹ค:
1. ์‹ฌ๋ณผ A๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด FIRST๋ฅผ ํ‰๊ฐ€ํ•œ๋‹ค.
2. ์‹ฌ๋ณผ NIL๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด REST๋ฅผ ํ‰๊ฐ€ํ•œ๋‹ค.
3. ํผ (CONS A NIL)๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
4. ํผ (CONS A NIL)์„ ํ‰๊ฐ€ํ•œ๋‹ค.
1. ์‹ฌ๋ณผ `NIL`์„ `REST`์— ๋ฐ”์ธ๋“œํ•œ๋‹ค.
2. ์‹ฌ๋ณผ `A`๋ฅผ `FIRST`์— ๋ฐ”์ธ๋“œํ•œ๋‹ค.
3. ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ฒ˜, `` `(CONS ,FIRST ,REST) `` ๋ณธ์ฒด๋ฅผ ํ‰๊ฐ€ํ•œ๋‹ค:
1. `FIRST`๋ฅผ ํ‰๊ฐ€ํ•˜์—ฌ ์‹ฌ๋ณผ `A`๋ฅผ ์–ป๋Š”๋‹ค.
2. `REST`๋ฅผ ํ‰๊ฐ€ํ•˜์—ฌ ์‹ฌ๋ณผ `NIL`๋ฅผ ์–ป๋Š”๋‹ค.
3. ํผ `(CONS A NIL)`๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
4. ํผ `(CONS A NIL)`์„ ํ‰๊ฐ€ํ•œ๋‹ค.

CONS๊ฐ€ ์ด์˜ ์ธ์ž๋ฅผ ํ‰๊ฐ€ํ•˜๋ฉฐ, ๋งคํฌ๋กœ ๋ณธ์ฒด๋Š” ๋‘ ์ธ์ž์— ๋”ฐ์˜ดํ‘œ๋ฅผ ๋ถ™์ด์ง€ ์•Š์•˜๊ธฐ์—, `reverse-cons`์˜ ๋‘ ์ธ์ž๋Š” ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค. `A`๋Š” ์‹ฌ๋ณผ `B`๋กœ ํ‰๊ฐ€๋˜๋ฉฐ, `NIL`์€ ์ž๊ธฐ์ž์‹ ์œผ๋กœ ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค.
`CONS`๋Š” ์ด์˜ ์ธ์ˆ˜๋“ค์„ ํ‰๊ฐ€ํ•˜๋ฉฐ, ๋งคํฌ๋กœ ๋ณธ์ฒด์—์„œ ๋‘ ์ธ์ž์— ๋”ฐ์˜ดํ‘œ๋ฅผ ๋ถ™์ด์ง€ ์•Š์•˜๊ธฐ์—, `reverse-cons`์˜ ๋‘ ์ธ์ˆ˜๋Š” ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค. `A`๋Š” ์‹ฌ๋ณผ `B`๋กœ ํ‰๊ฐ€๋˜๋ฉฐ, `NIL`์€ ์ž๊ธฐ์ž์‹ ์œผ๋กœ ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์ด ํ‰๊ฐ€๋˜๊ธฐ์ „์— ๋งคํฌ๋กœ ๋ณธ์ฒด๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์ง€๋Š”์ง€ ํ™•์ธํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด, `macroexpand` ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
์—ฌ๋Ÿฌ๋ถ„์ด ํ‰๊ฐ€๋˜๊ธฐ์ „์— ๋งคํฌ๋กœ ๋ณธ์ฒด๊ฐ€ ์–ด๋–ค์ง€ ํ™•์ธํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด, `macroexpand` ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

``` lisp
(macroexpand '(setq-literal a b))
Expand All @@ -73,9 +74,9 @@ a
;;=> (CONS A NIL)
```

`macroexpand`๋Š” ํ•จ์ˆ˜์ด๊ธฐ์— ์ธ์ž๋ฅผ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ํ™•์žฅ์‹œํ‚ค๊ณ ์ž ํ•˜๋Š” ํผ์— ๋”ฐ์˜ดํ‘œ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
`macroexpand`๋Š” ํ•จ์ˆ˜์ด๊ธฐ์— ์ธ์ž๋ฅผ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ํ™•์žฅ์‹œํ‚ค๊ณ ์ž ํ•˜๋Š” ํผ ์•ž์— ๋”ฐ์˜ดํ‘œ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ถ€๋Ÿฌ ์ด๋ฒˆ ๋ ˆ์Šจ์˜ ์˜ˆ์ œ๋ฅผ ๋งค์šฐ ๊ฐ„๋‹จํ•œ ๊ฑธ๋กœ ๋†“์•˜์œผ๋ฏ€๋กœ, ์—ฌ๋Ÿฌ๋ถ„์€ ๋งค์šฐ ๊ฐ„๋‹จ ๊ธฐ๋ณธ ๋งค์ปค๋‹ˆ์ฆ˜์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ, ๋งคํฌ๋กœ๋Š” ํ•จ์ˆ˜๋ณด๋‹ค ์ž‘์„ฑํ•˜๊ธฐ ํž˜๋“ญ๋‹ˆ๋‹ค - 20์žฅ[p 188]์—์„œ ์ด์œ ์™€ ๋ณต์žกํ•œ ์ƒํ™ฉ์„ ๋‹ค๋ฃฐ์ˆ˜ ์žˆ๋Š” ์ ์ ˆํ•œ ๊ธฐ๋ฒ•์„ ์‚ดํŽด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ผ๋ถ€๋Ÿฌ ์ด๋ฒˆ ๋ ˆ์Šจ์˜ ์˜ˆ์ œ๋ฅผ ๋งค์šฐ ๊ฐ„๋‹จํ•œ ๊ฑธ๋กœ ๋†“์•˜์œผ๋ฏ€๋กœ, ์—ฌ๋Ÿฌ๋ถ„์€ ๋งค์šฐ ๊ฐ„๋‹จ ๊ธฐ๋ณธ ๋งค์ปค๋‹ˆ์ฆ˜์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ, ๋งคํฌ๋กœ๋Š” ํ•จ์ˆ˜๋ณด๋‹ค ์ž‘์„ฑํ•˜๊ธฐ ํž˜๋“ญ๋‹ˆ๋‹ค - 20์žฅ[p 188]์—์„œ ๊ทธ ์ด์œ ์™€ ๊ทธ๋Ÿฌํ•œ ๋ณต์žกํ•œ ์ƒํ™ฉ์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ์ ์ ˆํ•œ ๊ธฐ๋ฒ•์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


## ์งš๊ณ  ๋„˜์–ด๊ฐ€๊ธฐ
Expand Down

0 comments on commit e4df964

Please sign in to comment.