μ½λλͺ½ν€λΌλ λ¨μ΄μ λΆμΎκ°μ λλΌλ μ¬λμ΄ μκ³ , SICP μ± μ λ ννλ©° λ΄μ©μ 리νκ³ μλ€λκ±Έ λͺ¨λ₯΄λ μ¬λλ λ§μ보μμΌλ―λ‘
"μ½λλͺ½ν€ λ²μ΄λκΈ°" μμ "SICP λ ν" μΌλ‘ μ λͺ© λ³κ²½.
μ¬νκΉμ§ μμ½.
νλ‘κ·Έλλ° μΈμ΄λ₯Ό μ΄ν΄νκΈ° μν΄μ, κ·Έ μΈμ΄κ° μ΄λ»κ² λ°μ΄ν°μ νλ‘μμ Έλ₯Ό λ€λ£¨λμ§ κΈ°μ΄λΆν° λΉλμ μ€.
μ±ν° 1μμλ νλ‘μμ Έμ μΆμνλ₯Ό ν΅ν΄ μΈμ΄μ ννλ ₯μ λμ΄λ λ²μ λ°°μ κ³ ,
μ€λλΆν°λ μ±ν° 2μ λ°μ΄ν°λ₯Ό ν΅ν μΆμνλ₯Ό λ°°μ.
-------------------------------
μ±ν° 1μμλ ν리미ν°λΈ λ°μ΄ν° (μ«μ)λ₯Ό κ°μ§κ³ μκ³ λ¦¬μ¦μ λ§λ€μμ§λ§, μ±ν° 2μμ λΆν°λ μ»΄νμ΄λ λ°μ΄ν°λ₯Ό μ΄μ©ν΄ λ°μ΄ν°μ μΆμνλ₯Ό νλ€.
μ»΄νμ΄λ λ°μ΄ν°λ μ¬λ¬κ°μ λ°μ΄ν°λ₯Ό νλμ λ°μ΄ν°λ‘ λ¬Άμκ².
λ°μ΄ν°μ μΆμνλ, λ°μ΄ν°κ° ꡬ체μ μΌλ‘ μ΄λ»κ² λ§λ€μ΄μ§λμ§λ₯Ό μ¨κΈ°κ³ λ°μ΄ν° κ·Έ μ체μ μ¬μ©λ²λ§ μκ°ν μ μλλ‘ νλκ²μ΄λ€.
μλ₯Ό λ€μ΄μ μ 리μμ μ¬μΉμ°μ°μ ꡬννλ€κ³ ν λ,
μ 리μλΌλ λ°μ΄ν°λ₯Ό μ΄λ»κ² λ§λ€μ΄μΌ νλμ§ κ°μ₯ ꡬ체μ μΈ λΆλΆμ λ°λ‘ μκ°νκ³ ,
μ 리μλΌλ μΆμμ μΈ λ°μ΄ν°κ° μλ€κ³ μκ°νκ³ νλ‘κ·Έλ¨μ μ€κ³νλκ².
μ¦, μ 리μλΌλ μΆμμ μΈ λ°μ΄ν°λ₯Ό κ°μ§κ³ νλ‘κ·Έλ¨μ μ§λ λΆλΆκ³Ό,
μ 리μ λ°μ΄ν°λ₯Ό μ΄λ»κ² ꡬνν κ²μΈκ°λ₯Ό λ°λ‘ λ 립μν¨λ€λ κ²μ΄λ€.
μ΄λ κ² λ°μ΄ν°μ μΆμνλ₯Ό νκΈ° μν΄μλ νλ‘κ·Έλ¨μ μ€κ³λ₯Ό λ°μ΄ν°μ μΆμνκ° κ°λ₯νλλ‘ νλκ²μ΄ μ€μ.
μ΄ λ°μΌλ‘λ μ€μ λ‘ μ 리μμ μ¬μΉμ°μ°μ ꡬνν΄μ λ°μ΄ν°μ μΆμνλ₯Ό μ΄μ©ν νλ‘κ·Έλ¨ μ€κ³λ₯Ό ν΄ λ³΄λλ‘ νλ€.
--------------------------------
μ 리μμ μ¬μΉμ°μ°μΌλ‘ λ§μ λΊμ κ³±μ λλμ , κ·Έλ¦¬κ³ λ μ 리μκ° κ°μμ§ λ€λ₯Έμ§ λΉκ΅νλ μ°μ°μ ꡬννλ€.
μ΄ νλ‘κ·Έλ¨μ ꡬννκΈ° μν΄μ, wishful thinking μ΄λΌλ μ¬κ³ λ°©μμ μ¬μ©νλ€.
Wishful thinking μ΄λ ν° κ°λ λΆν° νμ μ‘μ μκ°νκ³ κ΅¬μ²΄μ μΈ κ΅¬νλ°©λ²μ λμ€μ μκ°νλ νλ€μ΄ νμμ μ¬κ³ λ°©μμ΄λ€.
λ¨Όμ μ 리μλΌλ λ°μ΄ν°κ° μλμ κ°μ κ²μ΄ κ°λ₯νλ€ κ°μ νλ€.
1. μ 리μ λ°μ΄ν°λ λΆλͺ¨μ λΆμλ‘ μ΄λ£¨μ΄μ Έ μλ€.
2. μ 리μ λ°μ΄ν°μμ λΆλͺ¨λ₯Ό μΆμΆν μ μκ³ , λΆμλ₯Ό μΆμΆν μ μλ€.
ꡬ체μ μΈ κ΅¬νλ°©λ²μ λμ€μ μκ°νκΈ°λ‘ νκ³ ,
μ 리μ λ°μ΄ν°λ₯Ό ꡬννλ ν¨μ (컨μ€νΈλν°)λ μλμ κ°λ€κ³ κ°μ νκ³ , (nμ λΆμ, dλ λΆλͺ¨ )
(make-rat <n> <d>)
μ 리μ λ°μ΄ν°μμ λΆμλ₯Ό μ ννλ ν¨μ(μ λ ν°)λ μλμ κ°λ€κ³ κ°μ νκ³ (xλ μ 리μ λ°μ΄ν° )
(numer <x>)
μ 리μ λ°μ΄ν°μμ λΆλͺ¨λ₯Ό μΆμΆνλ ν¨μ(μ λ ν°)λ μλμ κ°λ€κ³ κ°μ νλ€. (xλ μ 리μ λ°μ΄ν° )
(denom <x>)
μ¬κΈ°μ μ€μνμ μ μμ ν¨μλ₯Ό μ΄λ»κ² ꡬνν μ§ κ΅¬μ²΄μ μΈ λ°©λ²μ νλλ μκ°μ νμ§ μμλ€λκ².
νμ§λ§ μμ ν¨μλ€λ§ μλ€λ©΄ μλμ μ 리μ μ¬μΉμ°μ°μ μ½κ² ꡬνν μ μλ€λκ²μ μ μ μλ€.
μ΄ μ¬μΉμ°μ°λ€μ μμ μΈκ°μ§ νλ‘μμ Έλ‘ λνλ΄λ©΄ μλμ κ°λ€.
μ΄λ κ² make-rat, numer, denomμ ꡬννκΈ° μ μ μΆμμ μΈ λ°μ΄ν°λ§μΌλ‘ λ¨Όμ λλ΅μ μΈ νμ λ§λ€μλ€.
μ΄μ μ€μ λ‘ μ΄λ»κ² μ 리μ λ°μ΄ν°λ₯Ό ꡬνν΄μΌ ν μ§ μκ°ν΄μΌ νλ€.
μ 리μ λ°μ΄ν°λ λΆλͺ¨μ λΆμμ νμ΄μ΄κ³ , μ΄ νμ΄μμ κ°κ°μ λΆμ λΆλͺ¨λ₯Ό μΆμΆνλ €λ©΄ μ΄λ»κ² ν΄μΌ ν κΉ?
λΌκ³ ꡬν λ°©λ²μ κ³ λ―Όν΄λ³΄λ©΄ lisp μμ pairλΌλ νΈλ¦¬ν λ°μ΄ν° κ΅¬μ‘°κ° μλ€λκ².
lisp μμλ pair λΌλ λ°μ΄ν° ꡬ쑰λ₯Ό μ 곡νλλ°, νμ΄μ¬μ Tuple κ°μ΄ λκ°μ λ°μ΄ν°λ₯Ό νμ΄λ‘ λ¬Άμ΄μ£Όλ λ°μ΄ν° ꡬ쑰μ΄λ€.
μ΄ pair λ₯Ό μμ±νλ νλ‘μμ Έλ cons μ΄κ³ , pair μμ 첫λ²μ§Έ μμ΄ν μ μΆμΆνλ νλ‘μμ Έλ car, λλ²μ§Έ μμ΄ν μ μΆμΆνλ νλ‘μμ Έλ carμ΄λ€.
κ·Έλ¬λκΉ (1, 2) pairλ₯Ό μμ±νκ³ μμ μμ΄ν
κ³Ό λ€μ μμ΄ν
μ μΆμΆνλκ²μ μ½λλ‘ λνλ΄λ©΄ μλμ κ°λ€.
pair μ μμ΄ν μ pairλ‘ νλκ²λ κ°λ₯.
μ΄ pairλ‘ λ§λ€μ΄μ§ λ°μ΄ν°λ₯Ό 리μ€νΈ λ°μ΄ν° ꡬ쑰λΌκ³ λΆλ₯Έλ€
μ¬ννΌ, μ΄ pairλ‘ μ 리μ λ°μ΄ν°λ₯Ό ꡬν κ°λ₯ν κ²μΌλ‘ 보μΈλ€.
pairλ‘ μμ μΈκ°μ§ ν¨μ, make-rat, numer, denum μ ꡬνν΄λ³΄λ©΄ μλμ κ°λ€.
μ΄λ κ² μ²μμ μ 리μμ μ¬μΉμ°μ°μ μΆμμ μΈ μ 리μ λ°μ΄ν°λ‘ λ¨Όμ νμ μ‘μκ³ ,
κ·Έ λ€μ μ 리μ λ°μ΄ν°λ₯Ό ꡬ체μ μΌλ‘ ꡬννλ€.
μ€μ λ‘ μ 리μμ μ¬μΉμ°μ°μ μ€ννκ³ κ·Έ κ²°κ³Όλ₯Ό νλ¦°νΈ νκΈ°μν΄ λ°μ ν¬νΌ νλ‘μμ Έλ₯Ό μ΄μ©,
μΆλ ₯ν΄λ³΄λ©΄ μλμ κ°λ€.
μ¬κΈ°μ μ£Όλͺ©ν΄μΌ ν μ μ΄, μ 리μμ μ¬μΉμ°μ°κ³Ό λ°μ΄ν°μ ꡬ체μ μΈ κ΅¬νμ μλ‘ λ 립λμ΄ μλ€λκ².
μ 리μμ μ¬μΉμ°μ° νλ‘κ·Έλ¨μ μ€κ³ν λ, μΆμμ μΈ λ°μ΄ν°λ₯Ό μ¬μ©ν΄μ μ΄ λ°μ΄ν°μ ꡬ체μ μΈ λ΄μ©κ³Ό μ¬μΉμ°μ°μ μμ‘΄μ±μ΄ μλ€λκ²μ΄λ€.
κ·Έκ²μ 보μ¬μ£ΌκΈ° μν΄ make-rat μ λ³νμμΌλ³Έλ€.
μμ μμ 보면 6/9 κ°μ κ³μ° κ²°κ³Όλ₯Ό κΈ°μ½λΆμλ‘ νννκ³ μΆλ€κ³ νμ.
κ·Έλ΄κ²½μ° μ 리μμ μ¬μΉμ°μ°μ κ·Έλλ‘ λκ³ , make-ratλ§ μμ λλ©΄ κ°λ¨ν κ°λ₯.
gdcλ₯Ό μ΅λ 곡배μλ₯Ό ꡬνλ ν¨μλΌκ³ κ°μ νλ©΄ μλμ κ°μ΄ make-ratμ λ³κ²½νλ©΄ νμ κΈ°μ½λΆμκ° λ§λ€μ΄μ§κ² λλ€.
κ²°κ³Όλ μλμ κ°λ€.
μ΄λ κ² λ°μ΄ν°μ μΆμνλ₯Ό ν΅ν΄ λ°μ΄ν°μ ꡬμ μ²μΈ ꡬνκ³Ό μ¬μ©νλκ²μ λ 립μν€λκ²μ λ°°μ μ.
μ€λ ꡬνν λ°©λ²μ 보면 λ°μ΄ν°μ ꡬ체μ μΈ κ΅¬νκ³Ό μ¬μΉμ°μ°μ ꡬνμ λ 립μν€λλ°, κ·Έκ²μ abstract barrier λΌκ³ λΆλ₯΄λ λͺ¨μ.
λ€μ κΈμμλ abstract barrier μ λν λΆλΆμ μμ½ μ 리ν¨.
μ€λμ μ¬κΈ°κΉμ§.
ν΄λΉ λκΈμ μμ λμμ΅λλ€.
νμ€ν μ΄μ κΉμ§ λͺ¨νΈνλ μμ λ²μΉλ€μ΄ μ’ μ λ¦¬κ° λλ λλμ΄ μλ€ γ γ
μμ λ΄μ©λ€μ μ λλ‘ μμ½μλλ μ΄μ μμμλΆν° λ§νλΏλ€ λ΄λ μ λμ ν΄μΌκΈλ€
λ΄κ° κΈμ λͺ»μ°λκ±°λ lisp λΌλ μμν μΈμ΄λΌμ μμλ£κΈ° νλ κ±° λΏμΌλ―...