Skip to content

Commit

Permalink
update: lesson_05~07.md
Browse files Browse the repository at this point in the history
  • Loading branch information
netpyoung committed Jan 27, 2024
1 parent 3296c49 commit 95eef0d
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 18 deletions.
10 changes: 5 additions & 5 deletions src/ch03/lesson_05.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@

## μ‹¬λ³Όλ‘œ 값에 이름 뢙일 수 μžˆλ‹€.

μ‹¬λ³Όμ˜ 자기 μžμ‹ μ„ ν‘œν˜„ν•˜λŠ” λŠ₯λ ₯ μ—­μ‹œ μœ μš©ν•˜μ§€λ§Œ, λ”μš± 일반적으둜 μ‚¬μš©λ˜λŠ” 곳은 κ°’μ˜ 이름을 뢙일 λ•Œμž…λ‹ˆλ‹€. μ΄λŠ” λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ λ³€μˆ˜μ™€ ν•¨μˆ˜ μ΄λ¦„μ˜ μ—­ν™œμ„ λ§‘μŠ΅λ‹ˆλ‹€. λ¦¬μŠ€ν”„ 심볼은 κ°’μ˜ μ΄λ¦„μ΄λ‚˜, ν•¨μˆ˜μ˜ 이름을 μ§€μ„λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.
μ‹¬λ³Όμ˜ 자기 μžμ‹ μ„ ν‘œν˜„ν•˜λŠ” λŠ₯λ ₯ μ—­μ‹œ μœ μš©ν•˜μ§€λ§Œ, λ”μš± 일반적으둜 μ‚¬μš©λ˜λŠ” 곳은 κ°’μ˜ 이름을 뢙일 λ•Œμž…λ‹ˆλ‹€. μ΄λŠ” λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ λ³€μˆ˜μ™€ ν•¨μˆ˜ μ΄λ¦„μ˜ μ—­ν™œμ„ λ§‘μŠ΅λ‹ˆλ‹€. λ¦¬μŠ€ν”„ 심볼은 κ°’μ˜ μ΄λ¦„μ΄λ‚˜, ν•¨μˆ˜μ˜ 이름을 지을 λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.

λ¦¬μŠ€ν”„μ—μ„œ νŠΉμ΄ν•œ 점 쀑 ν•˜λ‚˜λŠ” 심볼은 ν•¨μˆ˜λž‘ λ³€μˆ˜μ˜ 값을 λ™μ‹œμ— 지닐 수 μžˆλ‹€ λΌλŠ” 점 μž…λ‹ˆλ‹€:

Expand All @@ -67,16 +67,16 @@ first

μ²«λ²ˆμ§Έμ™€ λ§ˆμ§€λ§‰ κ²½μš°μ—μ„œμ˜ `first`λŠ” **λ³€μˆ˜** 이며 , λ‘λ²ˆμ§ΈμΈ κ²½μš°λŠ” λ¦¬μŠ€ν”„μ— μ˜ν•΄ 미리 μ •μ˜λœ **ν•¨μˆ˜** λΌλŠ” 점을 주의깊게 λ³΄μ‹œκΈΈ λ°”λžλ‹ˆλ‹€. λ¦¬μŠ€ν”„λŠ” 심볼이 λ³΄μ΄λŠ” 곳에 κΈ°λ°˜ν•˜μ—¬ 이 값이 무엇인지 κ²°μ •ν•©λ‹ˆλ‹€. 평가 κ·œμΉ™μ— 따라 값을 μš”μ²­λ°›μœΌλ©΄, λ¦¬μŠ€ν”„λŠ” μ‹¬λ³Όμ˜ λ³€μˆ˜ 값을 μ°ΎμŠ΅λ‹ˆλ‹€. ν•¨μˆ˜λ₯Ό μš”μ²­λ°›μœΌλ©΄, λ¦¬μŠ€ν”„λŠ” μ‹¬λ³Όμ˜ ν•¨μˆ˜ 값을 μ°ΎμŠ΅λ‹ˆλ‹€.

심볼은 λ³€μˆ˜λ‚˜ ν•¨μˆ˜μ˜ κ°’ 외에 λ‹€λ₯Έ 값을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 심볼은 λ¬Έμ„œ, ν”„λ‘œνΌν‹° 리슀트(property list) ν˜Ήμ€ 좜λ ₯μ‹œ ν‘œμ‹œλ˜λŠ” 값을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. μ‹¬λ³Όμ˜ λ¬Έμ„œλŠ” ν•΄λ‹Ή μ‹¬λ³Όμ˜ μ„€λͺ…을 μœ„ν•œ ν…μŠ€νŠΈμž…λ‹ˆλ‹€. `documentation` 폼을 μ‚¬μš©ν•˜κ±°λ‚˜ μ‹¬λ³Όμ˜ 값을 μ •μ˜ν•˜λŠ” λͺ‡λͺ‡ νΌμ—μ„œ 심볼에 λŒ€ν•œ λ¬Έμ„œλ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 심볼은 λ‹€μ–‘ν•œ 의미λ₯Ό κ°€μ§ˆ 수 μžˆμœΌλ―€λ‘œ ν•¨μˆ˜ 및 λ³€μˆ˜μ™€ 같이 μ—¬λŸ¬ 가지 μ˜λ―Έμ— λ§žλŠ” 각각에 λŒ€ν•œ λ¬Έμ„œλ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.
심볼은 λ³€μˆ˜λ‚˜ ν•¨μˆ˜μ˜ κ°’ 외에 λ‹€λ₯Έ 값을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 심볼은 λ¬Έμ„œ, ν”„λ‘œνΌν‹° 리슀트(property list) ν˜Ήμ€ 좜λ ₯μ‹œ ν‘œμ‹œλ˜λŠ” 값을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. μ‹¬λ³Όμ˜ λ¬Έμ„œλŠ” ν•΄λ‹Ή μ‹¬λ³Όμ˜ μ„€λͺ…을 μœ„ν•œ ν…μŠ€νŠΈμž…λ‹ˆλ‹€. `documentation` 폼을 μ‚¬μš©ν•˜κ±°λ‚˜ μ‹¬λ³Όμ˜ 값을 μ •μ˜ν•˜λŠ” λͺ‡λͺ‡ νΌμ—μ„œ 심볼에 λŒ€ν•œ λ¬Έμ„œλ„ 같이 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 심볼은 λ‹€μ–‘ν•œ 의미λ₯Ό κ°€μ§ˆ 수 μžˆμœΌλ―€λ‘œ ν•¨μˆ˜ 및 λ³€μˆ˜μ™€ 같이 μ—¬λŸ¬ 가지 μ˜λ―Έμ— λ§žλŠ” 각각에 λŒ€ν•œ λ¬Έμ„œλ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

ν”„λ‘œνΌν‹° λ¦¬μŠ€νŠΈλŠ” μ—”νŠΈλ¦¬(entry)λ‹Ή ν•˜λ‚˜μ˜ ν‚€λ₯Ό μ§€λ‹Œ μžκ·Έλ§ˆν•œ 데이터 λ² μ΄μŠ€μ™€ κ°™μŠ΅λ‹ˆλ‹€. 레슨 10 [p 65]μ—μ„œ μ΄λŸ¬ν•œ μ‹¬λ³Όμ˜ μ‚¬μš©λ²•μ„ μ‚΄νŽ΄λ³Ό κ²ƒμž…λ‹ˆλ‹€.

좜λ ₯ 이름은 λ¦¬μŠ€ν”„μ—μ„œ 심볼을 좜λ ₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 일반적으둜 이 이름을 λ³€κ²½ν•˜μ§€ μ•ŠλŠ”κ²Œ μ’‹μŠ΅λ‹ˆλ‹€; λ‹€λ₯Έ μ΄λ¦„μœΌλ‘œ λ³€κ²½ν•œλ‹€λ©΄, λ‹€λ₯Έ μ΄λ¦„μœΌλ‘œ 좜λ ₯된 κ²°κ³Όλ₯Ό λ¦¬μŠ€ν”„κ°€ λ‹€μ‹œ μ½μ–΄λ•Œ μ›λž˜ 심볼값과 λ‹€λ₯Έ 의미λ₯Ό 지녀 ν˜Όλž€μ„ μ•ΌκΈ°ν•  κ²ƒμž…λ‹ˆλ‹€.
좜λ ₯ 이름은 λ¦¬μŠ€ν”„μ—μ„œ 심볼을 좜λ ₯ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 일반적으둜 이 이름을 λ³€κ²½ν•˜μ§€ μ•ŠλŠ”κ²Œ μ’‹μŠ΅λ‹ˆλ‹€; λ‹€λ₯Έ μ΄λ¦„μœΌλ‘œ λ³€κ²½ν•œλ‹€λ©΄, λ‹€λ₯Έ μ΄λ¦„μœΌλ‘œ 좜λ ₯된 κ²°κ³Όλ₯Ό λ¦¬μŠ€ν”„κ°€ λ‹€μ‹œ μ½μ–΄λ“€μΌλ•Œ μ›λž˜ 심볼값과 λ‹€λ₯Έ 의미둜 λ°›μ•„λ“€μ—¬ ν˜Όλž€μ„ μ•ΌκΈ°ν•  κ²ƒμž…λ‹ˆλ‹€.


## 값은 ν•˜λ‚˜ μ΄μƒμ˜ 이름을 κ°€μ§ˆ 수 μžˆλ‹€

값은 ν•˜λ‚˜ μ΄μƒμ˜ 이름을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 즉, ν•˜λ‚˜ μ΄μƒμ˜ 심볼이 값을 κ³΅μœ ν•  수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. λ‹€λ₯Έ μ–Έμ–΄μ—μ„œ μ΄λŸ¬ν•œ λ°©μ‹μœΌλ‘œ λ™μž‘ν•˜λŠ” κ²ƒμœΌλ‘œλŠ” 포인터가 μžˆμŠ΅λ‹ˆλ‹€. λ¦¬μŠ€ν”„λŠ” ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²Œ 포인터λ₯Ό λ…ΈμΆœν•˜μ§€ μ•Šμ§€λ§Œ, κ³΅μœ λ˜μ–΄ μ‚¬μš©λ˜λŠ” μ˜€λΈŒμ νŠΈλ“€μ΄ μžˆμŠ΅λ‹ˆλ‹€. `eq` ν…ŒμŠ€νŠΈλ‘œ μ˜€λΈŒμ νŠΈκ°€ μ„œλ‘œ 같은지 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ— λ‚˜μ˜€λŠ” 것을 μ‚΄νŽ΄λ³΄μ‹œκΈ° λ°”λžλ‹ˆλ‹€:
값은 ν•˜λ‚˜ μ΄μƒμ˜ 이름을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 즉, ν•˜λ‚˜ μ΄μƒμ˜ 심볼이 λ™μΌν•œ 값을 κ³΅μœ ν•  수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. λ‹€λ₯Έ μ–Έμ–΄μ—μ„œ μ΄λŸ¬ν•œ λ°©μ‹μœΌλ‘œ λ™μž‘ν•˜λŠ” κ²ƒμœΌλ‘œλŠ” 포인터가 μžˆμŠ΅λ‹ˆλ‹€. λ¦¬μŠ€ν”„λŠ” ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²Œ 포인터λ₯Ό λ…ΈμΆœν•˜μ§„ μ•Šμ§€λ§Œ, κ³΅μœ λ˜μ–΄ μ‚¬μš©λ˜λŠ” μ˜€λΈŒμ νŠΈλ“€μ΄ μžˆμŠ΅λ‹ˆλ‹€. `eq` ν…ŒμŠ€νŠΈλ‘œ μ˜€λΈŒμ νŠΈκ°€ μ„œλ‘œ 같은지 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ— λ‚˜μ˜€λŠ” 것을 μ‚΄νŽ΄λ³΄μ‹œκΈ° λ°”λžλ‹ˆλ‹€:

``` lisp
(setq L1 (list 'a 'b 'c))
Expand All @@ -97,7 +97,7 @@ first

μ—¬κΈ°μ„œ, λ™μΌν•œ 값을 `L1`κ³Ό `L2`라 이름지엇기에, `L1`κ³Ό `L2`λŠ” `eq`ν•©λ‹ˆλ‹€. λ‹€μ‹œ λ§ν•˜μžλ©΄ `(list 'a 'b 'c)` 폼에 μ˜ν•΄ μƒμ„±λœ 값은 `L1`κ³Ό `L2`λΌλŠ” λ‘κ°œμ˜ 이름을 κ°–μŠ΅λ‹ˆλ‹€. `(setq L2 L1)` 폼은 "L2의 값이 L1의 값이 λ˜λ„λ‘ 해라" 라고 μ§€μ‹œν•©λ‹ˆλ‹€. κ°’μ˜ 볡사λ₯Ό 말 ν•˜λŠ”κ²Œ μ•„λ‹ˆλΌ, κ°’ κ·Έ 자체λ₯Ό μ§€μΉ­ν•©λ‹ˆλ‹€. λ”°λΌμ„œ `L1`κ³Ό `L2`λŠ” λ™μΌν•œ κ°’ (처음 `L1`에 ν• λ‹Ήλœ 리슀트 `(A B C)`)을 κ³΅μœ ν•©λ‹ˆλ‹€.

λ˜ν•œ `L3`도 리슀트 `(A B C)`λ₯Ό κ°’μœΌλ‘œ κ°–μ§€λ§Œ, μ΄λŠ” `L1`κ³Ό `L2`κ°€ κ³΅μœ ν•˜λŠ” κ²ƒκ³ΌλŠ” λ‹€λ₯Έ μƒˆλ‘œμš΄ 리슀트 μž…λ‹ˆλ‹€. 비둝 `L3`의 값이 `L1`κ³Ό `L2`의 κ°’κ³Ό λ™μΌν•œ κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ, λ‹€λ₯Έ `list` 폼에 μ˜ν•΄ μƒμ„±λ˜μ—ˆκΈ°μ—, μ΄λŠ” λ‹€λ₯Έ λ¦¬μŠ€νŠΈμž…λ‹ˆλ‹€. λ”°λΌμ„œ, μ„œλ‘œ 심볼 `A`, `B`, `C`둜 κ΅¬μ„±λœ λ¦¬μŠ€νŠΈμ΄μ§€λ§Œ, λ‹€λ₯Έ λ¦¬μŠ€νŠΈμ΄κΈ°μ—, `(eq L3 L1)`λŠ” `NIL`이 λ©λ‹ˆλ‹€.
λ˜ν•œ `L3`도 리슀트 `(A B C)`λ₯Ό κ°’μœΌλ‘œ κ°–μ§€λ§Œ, μ΄λŠ” `L1`κ³Ό `L2`κ°€ κ³΅μœ ν•˜λŠ” κ²ƒκ³ΌλŠ” λ‹€λ₯Έ μƒˆλ‘œμš΄ 리슀트 μž…λ‹ˆλ‹€. 비둝 `L3`의 값이 `L1`κ³Ό `L2`의 κ°’κ³Ό λ™μΌν•œ κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ, λ‹€λ₯Έ `list` 폼에 μ˜ν•΄ μƒμ„±λ˜μ—ˆκΈ°μ—, μ΄λŠ” λ‹€λ₯Έ λ¦¬μŠ€νŠΈμž…λ‹ˆλ‹€. λ”°λΌμ„œ, μ„œλ‘œ 심볼 `A`, `B`, `C`둜 κ΅¬μ„±λœ λ¦¬μŠ€νŠΈμ΄μ§€λ§Œ, λ‹€λ₯Έ λ¦¬μŠ€νŠΈμ΄κΈ°μ— `(eq L3 L1)`λŠ” `NIL`이 λ©λ‹ˆλ‹€.


## 짚고 λ„˜μ–΄κ°€κΈ°
Expand Down
17 changes: 10 additions & 7 deletions src/ch03/lesson_06.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

λ¦¬μŠ€ν”„λŠ” μ’…μ’…, λ³€μˆ˜μ˜ 값을 λ‹΄κΈ° μœ„ν•΄ μƒˆλ‘œμ΄ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜μ—¬ **바인딩을 λ§Œλ“­λ‹ˆλ‹€**. 바인딩은 λ³€μˆ˜μ˜ λ ‰μ‹œμ»¬ μŠ€μ½”ν”„(lexical scope) κ΅¬ν˜„μ„ μœ„ν•œ 맀우 일반적인 λ§€μ»€λ‹ˆμ¦˜μ΄μ§€λ§Œ, λ°”μΈλ”©μ˜ λΌμ΄ν”„νƒ€μž„μ— 따라 λ‹€λ₯Έ μš©λ„λ‘œλ„ μ‚¬μš©λ©λ‹ˆλ‹€. 8μž₯[p 126]μ—μ„œ λΌμ΄ν”„νƒ€μž„(lifetime)κ³Ό κ°€μ‹œμ„±(visibility)λ₯Ό κ³΅λΆ€ν• λ•Œ 이λ₯Ό λ‹€μ‹œ λ…Όν•  κ²ƒμž…λ‹ˆλ‹€.

예, λ¦¬μŠ€ν”„λŠ” μƒˆλ‘œμš΄ 바인딩을 μœ„ν•΄ μ €μž₯곡간을 ν• λ‹Ήν•©λ‹ˆλ‹€. 이것이 λ”μ°ν•˜κ²Œ λΉ„νš¨μœ¨μ μΈ κ²ƒμ²˜λŸΌ 보일지라도, λ¦¬μŠ€ν”„κ°€ 어디에 μ €μž₯곡간을 ν• λ‹Ήν•˜λŠ”μ§€μ— λŒ€ν•΄μ„œλŠ” 아직 μ•Œ 수 κ°€ μ—†μŠ΅λ‹ˆλ‹€. 예λ₯Όλ“€μ–΄, λ¦¬μŠ€ν”„λŠ” ν•¨μˆ˜ 인자λ₯Ό μ‹€μ œ κ°’μœΌλ‘œ λ°”μΈλ“œν•˜μ§€λ§Œ, λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ“€μ²˜λŸΌ μŠ€νƒμ— μ €μž₯곡간을 ν• λ‹Ήν•©λ‹ˆλ‹€. λ¦¬μŠ€ν”„λŠ”, 바인딩 폼의 싀행을 마치면 μ’…λ£Œλ˜λŠ”, λΌμ΄ν”„νƒ€μž„μ„ 바인딩이 μ§€λ…”λŠ”μ§€λ₯Ό νŒλ‹¨μΉ˜ λͺ»ν•˜λ©΄ 바인딩을 νž™(heap)에 μƒμ„±ν•©λ‹ˆλ‹€
λ¦¬μŠ€ν”„λŠ” μƒˆλ‘œμš΄ 바인딩을 μœ„ν•΄ μ €μž₯곡간을 ν• λ‹Ήν•©λ‹ˆλ‹€. 이것이 λ”μ°ν•˜κ²Œ λΉ„νš¨μœ¨μ μΈ κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ, 아직 λ¦¬μŠ€ν”„κ°€ 어디에 μ €μž₯곡간을 ν• λ‹Ήν•˜λŠ”μ§€μ— λŒ€ν•΄μ„œλŠ” μ•Œ 수 κ°€ μ—†μŠ΅λ‹ˆλ‹€. 예λ₯Όλ“€μ–΄, λ¦¬μŠ€ν”„λŠ” ν•¨μˆ˜ 인자λ₯Ό κ°’μœΌλ‘œ λ°”μΈλ“œν• λ•Œ, λ‹€λ₯Έ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ“€μ²˜λŸΌ μŠ€νƒ(stack)에 μ €μž₯곡간을 ν• λ‹Ήν•©λ‹ˆλ‹€. λ¦¬μŠ€ν”„λŠ” λ°”μΈλ”©μ˜ λΌμ΄ν”„νƒ€μž„μ„ νŒλ‹¨ν•  수 μ—†μœΌλ©΄ ν•΄λ‹Ή 바인딩을 νž™(heap)에 μƒμ„±ν•©λ‹ˆλ‹€.


## 바인딩은 이름을 가진닀
Expand All @@ -26,7 +26,9 @@
...)))
```

μ—¬κΈ°μ„œ, (...으둜 ν‘œμ‹œλœ) κ°€μž₯ μ•ˆμͺ½μ˜ `let`에 도착할 μ―€μ—λŠ”, `a`λŠ” 3개의 μ„œλ‘œ λ‹€λ₯Έ 바인딩을 κ°€μ§€κ²Œ λ©λ‹ˆλ‹€. 단, μœ„ μ˜ˆμ œκ°€ μ „ν˜•μ μΈ λ¦¬μŠ€ν”„ μ½”λ“œλΌκ³  λ§ν•˜λŠ” 것은 κ²°μ½” μ•„λ‹™λ‹ˆλ‹€.
μ—¬κΈ°μ„œ, (...으둜 ν‘œμ‹œλœ) κ°€μž₯ μ•ˆμͺ½μ˜ `let`에 도착할 μ―€μ—λŠ”, `a`λŠ” 3개의 μ„œλ‘œ λ‹€λ₯Έ 바인딩을 κ°€μ§€κ²Œ λ©λ‹ˆλ‹€.

단, μœ„ μ˜ˆμ œκ°€ μ „ν˜•μ μΈ λ¦¬μŠ€ν”„ μ½”λ“œλΌκ³  λ§ν•˜λŠ” 것은 κ²°μ½” μ•„λ‹™λ‹ˆλ‹€.


## κ°€μž₯ κ°€κΉŒμš΄ 바인딩
Expand All @@ -45,7 +47,7 @@
...)))
```

λ³΄μ‹œλ‹€μ‹œν”Ό, κ°€μž₯ κ°€κΉŒμš΄ λ°”μΈλ”©μ΄λž€ μƒλŒ€μ μΈ μœ„μΉ˜λ₯Ό κ°€μ§‘λ‹ˆλ‹€. 바인딩 폼이 μ–΄λ–»κ²Œ μ€‘μ²©λ˜μ—ˆλŠ”μ§€ μ‚΄νŽ΄λ³΄λ©΄ (μœ„μ—μ„œ λ³΄μΈκ²ƒμ²˜λŸΌ μ—¬λŸ¬λΆ„μ˜ μ½”λ“œλ₯Ό λ“€μ—¬μ“°κΈ°ν•˜μ˜€λ‹€λ©΄ 이λ₯Ό ν•˜κΈ°μ— μ‰¬μšΈ κ²ƒμž…λ‹ˆλ‹€), μ–΄λ–»κ²Œ ν”„λ‘œκ·Έλž¨μ΄ 바인딩에 μ•‘μ„ΈμŠ€ν•˜λŠ”μ§€ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.
λ³΄μ‹œλ‹€μ‹œν”Ό, κ°€μž₯ κ°€κΉŒμš΄ λ°”μΈλ”©μ΄λž€ μƒλŒ€μ μΈ μœ„μΉ˜λ₯Ό κ°€μ§‘λ‹ˆλ‹€. 바인딩 폼이 μ–΄λ–»κ²Œ μ€‘μ²©λ˜μ—ˆλŠ”μ§€ μ‚΄νŽ΄λ³΄λ©΄ (μœ„μ—μ„œ λ³΄μΈκ²ƒμ²˜λŸΌ μ—¬λŸ¬λΆ„μ˜ μ½”λ“œλ₯Ό λ“€μ—¬μ“°κΈ°ν•˜μ˜€λ‹€λ©΄ 이λ₯Ό ν•˜κΈ°μ— μ‰¬μšΈ κ²ƒμž…λ‹ˆλ‹€), μ–΄λ–»κ²Œ ν”„λ‘œκ·Έλž¨μ΄ 바인딩에 μ ‘κ·Όν•˜λŠ”μ§€ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

ν•œκ°€μ§€ 더 μ—¬λŸ¬λΆ„μ΄ μ•Œμ•„μ•Ό 할것은, λ‚΄λΆ€ 바인딩 폼이 λ™μΌν•œ 심볼을 λ°”μΈλ“œν•˜μ§€ μ•ŠλŠ” ν•œ, λ‚΄λΆ€ 바인딩 νΌμ—μ„œλ„ μ™ΈλΆ€ 바인딩이 μ—¬μ „νžˆ μœ νš¨ν•˜λ‹€λŠ” 점 μž…λ‹ˆλ‹€:

Expand Down Expand Up @@ -93,9 +95,10 @@
``` lisp
(let ((z 1))
;; μ—¬κΈ°μ„œ, Z의 κ°€μž₯ κ°€κΉŒμš΄ 바인딩은 κ°’ 1을 μ§€λ‹™λ‹ˆλ‹€.
(setq z 9)
(setq z 9)
;; 이제 κ°’ ZλŠ” 9μž…λ‹ˆλ‹€.
(let ((z 2))
;; μ—¬κΈ°μ„œ, Z의 κ°€μž₯ κ°€κΉŒμš΄ 바인딩은 κ°’ 2을 μ§€λ‹™λ‹ˆλ‹€.
...)
Expand All @@ -105,9 +108,9 @@
...)
```

μœ„μ˜ `setq` 폼은, λ°”κΉ₯μͺ½ `let` νΌμ—μ„œ μ •μ˜λœ `z`의 바인딩값을 λ°”κΏ‰λ‹ˆλ‹€. μ΄λŠ” μ’…μ’… 쒋지 μ•Šμ€ 일을 μ•ΌκΈ°ν•©λ‹ˆλ‹€. 문제라고 μƒκ°λ˜λŠ” 점은 `z`의 값을 ν™•μΈν•˜κΈ° μœ„ν•΄ μ‚΄νŽ΄λ΄μ•Όλ§Œ ν•˜λŠ” 곳이 이제 두 곳으둜 λŠ˜μ–΄λ‚¬λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€ - μ²«λ²ˆμ§ΈλŠ” 바인딩 폼, κ·Έ λ‹€μŒμ€ `setq`둜 ν• λ‹Ήν•œ μ½”λ“œ. λ“€μ—¬μ“°κΈ°λ₯Ό ν™œμš©ν•˜λŠ” 바인딩 νΌκ³ΌλŠ” 달리, ν”„λ‘œκ·Έλž¨μ˜ 본체 λΆ€λΆ„μ—μ„œ ν• λ‹Ήν•˜λŠ” 폼을 μœ„ν•œ λ“€μ—¬μ“°κΈ°λŠ” μ—†μŠ΅λ‹ˆλ‹€; ν”„λ‘œκ·Έλž¨μ„ μ½μ„λ•Œ μ΄λŸ¬ν•œ 뢀뢄을 μ°Ύμ•„λ‚΄λŠ”κ²ƒμ΄ μ–΄λ ΅μŠ΅λ‹ˆλ‹€.
μœ„μ˜ `setq` 폼은, λ°”κΉ₯μͺ½ `let` νΌμ—μ„œ μ •μ˜λœ `z`의 바인딩값을 λ°”κΏ‰λ‹ˆλ‹€. μ΄λŠ” μ’…μ’… 쒋지 μ•Šμ€ 일을 λΆˆλŸ¬μ˜΅λ‹ˆλ‹€. 문제라고 μƒκ°λ˜λŠ” 점은 `z`의 값을 ν™•μΈν•˜κΈ° μœ„ν•΄ μ‚΄νŽ΄λ΄μ•Όλ§Œ ν•˜λŠ” 곳이 이제 두 곳으둜 λŠ˜μ–΄λ‚¬λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€ - μ²«λ²ˆμ§ΈλŠ” 바인딩 폼, κ·Έ λ‹€μŒμ€ `setq`둜 ν• λ‹Ήν•œ μ½”λ“œ. λ“€μ—¬μ“°κΈ°λ₯Ό ν™œμš©ν•˜λŠ” 바인딩 νΌκ³ΌλŠ” 달리, ν”„λ‘œκ·Έλž¨μ˜ 본체 λΆ€λΆ„μ—μ„œ ν• λ‹Ήν•˜λŠ” νΌμ—λŠ” λ”°λ‘œ λ“€μ—¬μ“°κΈ°κ°€ μ—†μŠ΅λ‹ˆλ‹€; ν”„λ‘œκ·Έλž¨μ„ μ½μ„λ•Œ μ΄λŸ¬ν•œ 뢀뢄을 μ°Ύμ•„λ‚΄λŠ”κ²ƒμ΄ μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

μ €ν¬λŠ” 이전 μ˜ˆμ œμ—μ„œ λ΄€λ˜κ²ƒκ³Ό 같이 μƒˆλ‘œμš΄ 바인딩을 λ„μž…ν•˜μ—¬ 맀우 μ‰½κ²Œ ν• λ‹Ήν•˜λŠ” μ½”λ“œλ₯Ό μš°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
이전 μ˜ˆμ œμ—μ„œ λ΄€λ˜κ²ƒκ³Ό 같이 μƒˆλ‘œμš΄ 바인딩을 λ„μž…ν•˜μ—¬ 맀우 μ‰½κ²Œ ν• λ‹Ήν•˜λŠ” μ½”λ“œλ₯Ό μš°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

``` lisp
(let ((z 1))
Expand All @@ -128,7 +131,7 @@
...)
```

이제 `let`폼의 λ“€μ—¬μ“°κΈ°λ‘œ 인해 `z`의 λͺ¨λ“  바인딩을 μ•Œμ•„λ³΄κΈ° μ‰¬μ›Œμ‘ŒμŠ΅λ‹ˆλ‹€. ν”„λ‘œκ·Έλž¨μ„ μ½λŠ” λ™μ•ˆ, ν”„λ‘œκ·Έλž¨μ˜ μ–΄λŠ μ§€μ μ—μ„œ(μ˜ˆμ œμ—μ„œλŠ” ...μ—μ„œ) Z의 μ˜¬λ°”λ₯Έ 바인딩을 μ°ΎκΈ°μœ„ν•΄ μ—¬λŸ¬λΆ„μ΄ ν•΄μ•Όν•  일은 λ“€μ—¬μ“°κΈ°λ₯Ό μ£Όμ˜ν•˜μ—¬ μƒμœ„ λ ˆλ²¨μ— μžˆλŠ” `let` 폼을 μ°Ύμ•„λ³΄λŠ” κ²ƒμž…λ‹ˆλ‹€.
이제 `let`폼의 λ“€μ—¬μ“°κΈ°λ‘œ 인해 `z`의 λͺ¨λ“  바인딩을 μ•Œμ•„λ³΄κΈ° μ‰¬μ›Œμ‘ŒμŠ΅λ‹ˆλ‹€. ν”„λ‘œκ·Έλž¨μ˜ μ–΄λŠ μ§€μ μ—μ„œ(μ˜ˆμ œμ—μ„œλŠ” ...μ—μ„œ) `z`의 μ˜¬λ°”λ₯Έ 바인딩을 μ°ΎκΈ° μœ„ν•΄ μ—¬λŸ¬λΆ„μ΄ ν•΄μ•Όν•  일은 ν”„λ‘œκ·Έλž¨μ„ 읽을 μ‹œ λ“€μ—¬μ“°κΈ°λ₯Ό μ£Όμ˜ν•˜μ—¬ μƒμœ„ λ ˆλ²¨μ— μžˆλŠ” `let` 폼을 μ°Ύμ•„λ³΄λŠ” κ²ƒμž…λ‹ˆλ‹€.

`let` 폼으둜 λ‘˜λŸ¬μ‹Έμ—¬ μžˆμ§€ μ•ŠλŠ” κ³³μ—μ„œ `setq` 폼이 μ–΄λ– ν•œ λ³€μˆ˜λ₯Ό ν• λ‹Ήν•˜κ³  μžˆλ‹€λ©΄, μ΄λŠ” μ „μ—­ λ³€μˆ˜μ΄κ±°λ‚˜ 특수(special) λ³€μˆ˜μΌ κ²ƒμž…λ‹ˆλ‹€.

Expand Down
12 changes: 6 additions & 6 deletions src/ch03/lesson_07.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@
2. 인자 이름 리슀트: 이것이 ν˜ΈμΆœλ˜μ—‡μ„μ‹œ ν•¨μˆ˜μ˜ μΈμžκ°€ 될 `(the-number)`
3. ν•¨μˆ˜μ˜ 본체: `(let ...)`

3개 λͺ¨λ‘ 각각 κ·Έ κ·ΈλŒ€λ‘œ λ‚˜νƒ€λ‚΄μ–΄μ•Ό ν•˜λ―€λ‘œ, `defun`은 인자λ₯Ό ν‰κ°€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ (만일 평가λ₯Ό μˆ˜ν–‰ν•œλ‹€λ©΄, 각 μΈμžμ— `quote`λ₯Ό λΆ™μ—¬μ•Όλ§Œ ν•˜λŠ” λΆˆνŽΈν•¨μ΄ 생길 κ²ƒμž…λ‹ˆλ‹€).
3개 λͺ¨λ‘ 각각 κ·Έ κ·ΈλŒ€λ‘œ λ‚˜νƒ€λ‚΄μ–΄μ•Ό ν•˜λ―€λ‘œ, `defun`은 인자λ₯Ό ν‰κ°€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ (만일 평가가 μˆ˜ν–‰λ˜μ—ˆλ‹€λ©΄, 각 μΈμžμ— `quote`λ₯Ό λΆ™μ—¬μ•Όλ§Œ ν•˜λŠ” λΆˆνŽΈν•¨μ΄ 생길 κ²ƒμž…λ‹ˆλ‹€).

`defun`은 μ •μ˜λœ ν•¨μˆ˜ 이름을 λ°˜ν™˜ν•˜κ³ , μ—¬λŸ¬λΆ„μ΄ μ œκ³΅ν•œ 이름, 인자 리슀트, 본체λ₯Ό μ΄μš©ν•˜μ—¬ μ „μ—­μœΌλ‘œ μ •μ˜λ₯Ό μ„ μ–Έν•©λ‹ˆλ‹€. `defun`을 μ΄μš©ν•˜μ—¬ ν•¨μˆ˜λ₯Ό λ§Œλ“€λ©΄, λ°”λ‘œ 이λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€:
`defun`은 μ •μ˜λœ ν•¨μˆ˜ 이름을 λ°˜ν™˜ν•˜κ³ , μ—¬λŸ¬λΆ„μ΄ μ œκ³΅ν•œ 이름, 인자 리슀트, 본체λ₯Ό μ΄μš©ν•˜μ—¬ ν•¨μˆ˜μ˜ μ •μ˜λ₯Ό μ „μ—­μœΌλ‘œ μ„ μ–Έν•©λ‹ˆλ‹€. `defun`을 μ΄μš©ν•˜μ—¬ ν•¨μˆ˜λ₯Ό λ§Œλ“€κ³  λ‚˜λ©΄ λ°”λ‘œ 이λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

``` lisp
(secret-number 11)
Expand All @@ -39,7 +39,7 @@
;;=> THAT-IS-THE-SECRET-NUMBER
```

ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν• λ•Œ, μ΄κ²ƒμ˜ μΈμžλŠ”(예. λ‘λ²ˆμ©¨ μ˜ˆμ œμ—μ„œ `99`) μ •μ˜μ—μ„œ μ‚¬μš©ν•œ 인자 이름(즉. `the-umber`)에 바인딩이 λ©λ‹ˆλ‹€. 그런 λ‹€μŒ, ν•¨μˆ˜μ˜ 본체 (즉. (LET ...))은 ν•΄λ‹Ή 인자의 바인딩 μ»¨ν…μŠ€νŠΈλ‘œ ν‰κ°€λ©λ‹ˆλ‹€. λ‹€λ₯Έ 말둜 ν•˜μžλ©΄, `(SECRET-NUMBER 99)`λ₯Ό ν‰κ°€ν•˜λŠ” 것은 λ³€μˆ˜ `THE-NUMBER`둜 `99`κ°€ 바인딩 된체 `SECRET-NUMBER` ν•¨μˆ˜ 본체λ₯Ό μ‹€ν–‰ν•˜λ„λ‘ λ§Œλ“€μ–΄ μ€λ‹ˆλ‹€.
ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν• λ•Œ, μ΄κ²ƒμ˜ μΈμˆ˜λŠ”(예. λ‘λ²ˆμ©¨ μ˜ˆμ œμ—μ„œ `99`) μ •μ˜μ—μ„œ μ‚¬μš©ν•œ 인자 이름(즉. `the-umber`)에 바인딩이 λ©λ‹ˆλ‹€. 그런 λ‹€μŒ, ν•¨μˆ˜μ˜ 본체 (즉. (LET ...))은 ν•΄λ‹Ή 인자의 바인딩 μ»¨ν…μŠ€νŠΈλ‘œ ν‰κ°€λ©λ‹ˆλ‹€. λ‹€λ₯Έ 말둜 ν•˜μžλ©΄, `(SECRET-NUMBER 99)`λ₯Ό ν‰κ°€ν•˜λŠ” 것은 `99`κ°€ λ³€μˆ˜ `THE-NUMBER`둜 바인딩 된체 `SECRET-NUMBER` ν•¨μˆ˜ 본체λ₯Ό μ‹€ν–‰ν•˜λ„λ‘ λ§Œλ“€μ–΄ μ€λ‹ˆλ‹€.

λ¬Όλ‘ , μ—¬λŸ¬λΆ„μ€ ν•˜λ‚˜ μ΄μƒμ˜ 인자λ₯Ό μ§€λ‹Œ ν•¨μˆ˜λ₯Ό μ •μ˜ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Expand All @@ -54,12 +54,12 @@
;;=> 92
```

ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν• λ•Œ μΈμˆ˜λ“€μ€, μˆœμ„œμ— 맞게 인자 이름에 바인딩 λ©λ‹ˆλ‹€. λ¦¬μŠ€ν”„λŠ” 인자 μ΄λ¦„μ˜ λ¦¬μŠ€νŠΈλŠ” μ—¬λŸ¬κ°€μ§€ λ³€ν˜•λ“€μ΄ μžˆμŠ΅λ‹ˆλ‹€. κ³΅μ‹μ μœΌλ‘œ μ΄λŸ¬ν•œ λ³€ν˜• 리슀트λ₯Ό λžŒλ‹€ 리슀트라 λΆ€λ¦…λ‹ˆλ‹€ - 21μž₯[p 198]μ—μ„œ μ΄κ²ƒμ˜ λ‹€λ₯Έ κΈ°λŠ₯듀에 λŒ€ν•΄ μ‚΄νŽ΄ λ³Ό κ²ƒμž…λ‹ˆλ‹€.
ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν• λ•Œ μΈμˆ˜λ“€μ€ μˆœμ„œμ— 맞게 인자 이름에 바인딩 λ©λ‹ˆλ‹€. λ¦¬μŠ€ν”„λŠ” 인자 μ΄λ¦„μ˜ λ¦¬μŠ€νŠΈλŠ” μ—¬λŸ¬κ°€μ§€ λ³€ν˜•λ“€μ΄ μžˆμŠ΅λ‹ˆλ‹€. κ³΅μ‹μ μœΌλ‘œ μ΄λŸ¬ν•œ λ³€ν˜• 리슀트λ₯Ό λžŒλ‹€ 리슀트라 λΆ€λ¦…λ‹ˆλ‹€ - 21μž₯[p 198]μ—μ„œ μ΄κ²ƒμ˜ λ‹€λ₯Έ κΈ°λŠ₯듀에 λŒ€ν•΄ μ‚΄νŽ΄ λ³Ό κ²ƒμž…λ‹ˆλ‹€.


## LAMBDA - 이름 μ—†λŠ” ν•¨μˆ˜ μ •μ˜

λ•Œλ‘œλŠ” ν”„λ‘œκ·Έλž¨μ—μ„œ 단 ν•œκ³³μ—μ„œλ§Œ μ“°μ΄λŠ” ν•¨μˆ˜κ°€ ν•„μš”ν•  κ²ƒμž…λ‹ˆλ‹€. `defun`으둜 ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄ 이λ₯Ό ν•œλ²ˆλ§Œ ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€. 그리고 λ•Œλ•Œλ‘œ, λ‚˜μ€‘μ— ν”„λ‘œκ·Έλž¨μ„ μ½μ„λ•Œ 도움을 μ£ΌλŠ” 잘 μ§œμ—¬μ§„ 이름을 ν•¨μˆ˜μ— λΆ€μ—¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ’…μ’… μ—¬λŸ¬λΆ„μ΄ ν•„μš”ν•œ ν•¨μˆ˜λŠ” μ•„μ£Ό μ‚¬μ†Œν•˜κ±°λ‚˜ μ•„μ£Ό λͺ…λ°±ν•˜μ—¬ 이름을 ꡳ이 지을 ν•„μš”κ°€ μ—†κ±°λ‚˜, 이전에 이름이 μ“°μ˜€λŠ”μ§€μ— λŒ€ν•΄ κ±±μ •ν•˜μ§€ μ•Šκ³  싢을 λ•Œκ°€ μžˆμ„ κ²ƒμž…λ‹ˆλ‹€. 이와 같은 μƒν™©μ—μ„œ, λ¦¬μŠ€ν”„μ—μ„  `lambda` 폼을 μ΄μš©ν•˜μ—¬ 이름 μ—†λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. `lambda` 폼은 마치 이름이 μ—†λŠ” `defun` 폼처럼 λ³΄μž…λ‹ˆλ‹€:
λ•Œλ‘œλŠ” ν”„λ‘œκ·Έλž¨μ—μ„œ 단 ν•œκ³³μ—μ„œλ§Œ μ“°μ΄λŠ” ν•¨μˆ˜κ°€ ν•„μš”ν•  κ²ƒμž…λ‹ˆλ‹€. `defun`으둜 ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄ 이λ₯Ό ν•œλ²ˆλ§Œ ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€. 그리고 λ•Œλ•Œλ‘œ ν”„λ‘œκ·Έλž¨μ„ 읽을 λ•Œλ₯Ό 도움이 λ˜λ„λ‘ ν•¨μˆ˜μ— 잘 μ§œμ—¬μ§„ 이름을 λΆ€μ—¬ν•  수 도 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ’…μ’… μ—¬λŸ¬λΆ„μ΄ ν•„μš”ν•œ ν•¨μˆ˜λŠ” μ•„μ£Ό μ‚¬μ†Œν•˜κ±°λ‚˜ μ•„μ£Ό λͺ…λ°±ν•˜μ—¬ 이름을 ꡳ이 지을 ν•„μš”κ°€ μ—†κ±°λ‚˜, 이전에 같은 이름이 μ“°μ˜€λŠ”μ§€μ— λŒ€ν•΄ κ±±μ •ν•˜μ§€ μ•Šκ³  싢을 λ•Œκ°€ μžˆμ„ κ²ƒμž…λ‹ˆλ‹€. 이와 같은 μƒν™©μ—μ„œ, λ¦¬μŠ€ν”„μ—μ„  `lambda` 폼을 μ΄μš©ν•˜μ—¬ 이름 μ—†λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. `lambda` 폼은 마치 이름이 μ—†λŠ” `defun` 폼처럼 λ³΄μž…λ‹ˆλ‹€:

``` lisp
(lambda (a b c x)
Expand All @@ -68,7 +68,7 @@
c))
```

μ—¬κΈ°μ„œ `lambda` 폼을 평가할 수 μ—†μŠ΅λ‹ˆλ‹€; μ΄λŠ” λ¦¬μŠ€ν”„κ°€ ν•¨μˆ˜ 자리라고 μ˜ˆμƒλ˜μ–΄ μ§€λŠ” κ³³μ—μ„œλ§Œ 보여야 ν•©λ‹ˆλ‹€ - 보톡 폼의 첫번째 μš”μ†Œλ‘œ;
μ—¬κΈ°μ„œ `lambda` 폼을 평가할 수 μ—†μŠ΅λ‹ˆλ‹€; μ΄λŠ” λ¦¬μŠ€ν”„κ°€ ν•¨μˆ˜ 자리라고 μ˜ˆμƒλ˜μ–΄ μ§€λŠ” κ³³μ—μ„œλ§Œ 보여야 ν•©λ‹ˆλ‹€ - 보톡 폼의 첫번째 μš”μ†Œ;

``` lisp
(lambda (a b c x)
Expand Down

0 comments on commit 95eef0d

Please sign in to comment.