์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
(format t "Hello, World!")
1. ๊ฐ์2. ์ญ์ฌ3. ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฏธ์น ์ํฅ4. ํน์ง
4.1. Atom4.2. ๋ฆฌ์คํธ4.3. ๋ฌธ๋ฒ4.4. Homoiconicity, ๋๋ Code is data, data is code4.5. ๋๋ค ํจ์4.6. ๋งคํฌ๋ก4.7. Lisp 1, Lisp 2
5. SICP์ ๋ฆฌ์คํ์ ๋ํ ์คํด6. ์ด์ผ๊ธฐ๊ฑฐ๋ฆฌ7. ๋ฆฌ์คํ ์ฌํฌ๋ฆฌ7.1. 2๋ ๋ฆฌ์คํ ์ฌํฌ๋ฆฌ7.2. ์ ๋ช
ํ ๋ฆฌ์คํ ์ฌํฌ๋ฆฌ
8. Lisp ์ฌํฌ๋ฆฌ ๋น๊ต9. ์ธ์ด์ฅ์ ์ ํ ์ข
๋ฅ1. ๊ฐ์[ํธ์ง]
"LISP์ ๋ฐ ์ธ๊ธฐ๊ฐ ๋์๋๋ฐ๋ ์ฌ์ ํ ๋ณ์น ์๋ ์๋ฒฝํจ์ด ๋๊ปด์ ธ."
"์ด ์ธ์ดํด์ด ์์ํ ๊ณ์๋ ์ง ๊ถ๊ธํ๋ค. ์๋ก์ด ์ธ๋์ ์ฝ๋๋ค ์ค ๋ช ๋ช ์ด ๋งค๋ฒ LISP์ ์ฌ๋ฐ๊ฒฌํ๋๊ฑฐ์ง."
"๋ค ์๋ฒ์ง์ ๊ดํธ๋ค์ด๋๋ค. ๋ ๊ณ ์ํ ์๋์ ๊ฑธ๋ง๋ ์ฐ์ํ ๋ฌด๊ธฐ๋ค์ด์ง."
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ ์ข ๋ฅ. ๋ํ์ ์ธ ํจ์ํ ์ธ์ด์ด๋ค.
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ญ์ฌ๋ฅผ ๋งํ ๋, ํ๋์ ์ปดํจํฐ๋ฅผ ์ํด ๋ฑ์ฅํ ๊ณ ๊ธ ์ธ์ด ์ค ๊ฐ์ฅ ์ค๋๋ ๊ฒ์ด ํฌํธ๋์ด๊ณ , ๋ ๋ฒ์งธ๋ก ์ค๋๋ ๊ฒ์ด ๋ฐ๋ก ์ด ๋ฆฌ์คํ๋ค. ์ญ์ฌ๊ฐ ๊ธด ๋งํผ, ์์ Lisp-family๋ผ ๋ถ๋ฆฌ๋ ์ฌ๋ฌ ๊ฐ์ง ์ฌํฌ๋ฆฌ๊ฐ ์กด์ฌํ๊ณ , ์ด๊ฒ๋ค์ด ๋๋ฌด ๋ค์ํ๊ฒ ๋๋ฆฝํ๊ธฐ ๋๋ฌธ์, ๊ณตํต ํ์ค ๊ท๊ฒฉ์ ๋ง๋ค์ด 1984๋ ์ ์ปค๋จผ ๋ฆฌ์คํ(Common Lisp)๊ฐ ํ์ํ๋ค. ๋ณดํต ๋ฆฌ์คํ๋ผ๊ณ ๋งํ๋ฉด ์ด๋ฌํ ์ฌํฌ๋ฆฌ๊น์ง ๋ชจ๋ ํฌํจํ๋ ์๋ฏธ๋ก ์ฌ์ฉ๋๋ค. ์ต์ด ํ๊ธฐ๋ LISP์ด์์ง๋ง ์ด๋์ Lisp์ผ๋ก ํ๊ธฐ๋๊ธฐ ์์ํ์ผ๋ฉฐ, ์ง๊ธ์ Lisp์ด ๋๋ฆฌ ์ฐ์ธ๋ค.
2. ์ญ์ฌ[ํธ์ง]
1958๋
๋ฏธ๊ตญ MIT์ ์กด ๋งค์นด์๊ฐ ๊ฐ๋ฐํ๋๋ฐ, ๋น์ ๋งค์นด์๋ ์ธ๊ณต์ง๋ฅ์ ์ฐ๊ตฌํ๋ ํ๋ก์ ํธ์์ FORTRAN์์ ๋ชฉ๋ก ์์
์ ์ํํ๋ ์๋ธ๋ฃจํด์ ํจํค์ง๋ก Fortran List Processing Language(FLPL)์ ๊ตฌํํ๋ค. ์ด๊ฒ์ด ๋ฆฌ์คํ์ ๋ชจํ๊ฐ ๋์ด, 1958๋
์ ๋ฆฌ์คํ๊ฐ ์ธ์์ ๋ฑ์ฅํ๊ฒ ๋๋ค. ์ดํ ์๋น๊ธฐ๊ฐ ๋ฆฌ์คํ๋ ์ธ๊ณต์ง๋ฅ ๊ด๋ จ ์ธ์ด๋ผ๋ ์ธ์์ด ๊ฐํ๋๋ฐ, ์ด๋งฅ์ค(Emacs), AutoCAD ๋ฑ ์ธ๊ณต์ง๋ฅ๊ณผ ์ ํ ๊ด๋ จ์๋ ๋ถ์ผ์์๋ ๋ฆฌ์คํ๊ฐ ์ฌ์ฉ๋๋ฉด์ ์ด๋ฌํ ์ธ์์ด ๋ง์ด ์
์ด์ก๋ค.
3. ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฏธ์น ์ํฅ[ํธ์ง]
์ธ์ด ์์ฒด๊ฐ ์๋ก์ด ๊ธฐ๋ฅ์ ํ์ฌํ๊ธฐ ๊ฑธ๋ง๊ฒ ์ ์ฐํ๊ธฐ๋ ํ๊ณ , ์ค๋ซ๋์ ํ๊ณ์ ํน์ ๋ถ์ผ์์ ๊ฑฐ์ ํ์ค์ ์ผ๋ก ์ฌ์ฉ๋ ์ธ์ด์๊ธฐ ๋๋ฌธ์, ๋ฆฌ์คํ๊ฐ ํ๋ ์ธ์ด์ ๋ผ์น ์ํฅ์ ๋งค์ฐ ํฌ๋ค. if-then-else ํ์, ์ฌ๊ทํจ์, ์ฐ๋ ๊ธฐ์์ง, JIT, ๋์ ํ์ดํ, ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น, ์ผ๊ธ ํจ์๊ฐ์ฒด, ์กํฐ ๋ชจ๋ธ ๋ฑ ๋ช
๋ นํ์ด๊ณ ํจ์ํ์ด๊ณ ๋ฅผ ๋ถ๋ฌธํ๊ณ ๊ฐ์ ์ ์ธ ์ํฅ๊น์ง ํฌํจํ๋ฉด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ค ๋ฆฌ์คํ์ ์ํฅ์ ๋ฐ์ง ์์ ๊ฒ์ ์ฐพ์๋ณด๊ธฐ ํ๋ค ์ ๋์ด๋ค.
4. ํน์ง[ํธ์ง]
4.1. Atom[ํธ์ง]
์ด๊ธฐ์ ๋ฆฌ์คํ์ ๋ฐ์ดํฐํ์ Atom๊ณผ ๋ฆฌ์คํธ๋ก ๊ตฌ๋ถ๋์๋ค. Atom์ ์์๋ ์ฌ๋ณผ์ ๋ปํ๊ณ , ๋ฆฌ์คํธ๋ ์ด๋ฌํ Atom ๋๋ ๋ค๋ฅธ ๋ฆฌ์คํธ๋ฅผ ์์๋ก ํฌํจํ๋ฉฐ ์ ํํ ๊ธธ์ด๋ฅผ ๊ฐ์ง๋ค. ์ฌ๊ธฐ์ ๋๋๋ฌ์ง๋ ํน์ง์, Atom์ ๊ฐ์ด ๋ถ๋ณ(immutable)์ด๋ผ๋ ์ ์ด๋ค.
์ดํ ์ฌ๋ฌ ๋ฆฌ์ต ์ฌํฌ๋ฆฌ๊ฐ ๊ฐ๋ฐ๋๊ณ ๋ถํ๋๋ ๊ณผ์ ์์ Atom์ Immutable ํน์ฑ์ด ์ฌ๋ผ์ง๋ ๊ฒฝ์ฐ๋ ๋ง์ด ๋ฐ์ํ์ผ๋ฉฐ, ์ด๋ ์๋ง๋ ์ค์ฉ์ ์ธ ๋ชฉ์ ์ ์ํด ์ด๋ ๊ฒ ๋ ๊ฒ์ด ์๋๊น๋ผ๊ณ ์ถ์ธกํ๋ค.
์ดํ ์ฌ๋ฌ ๋ฆฌ์ต ์ฌํฌ๋ฆฌ๊ฐ ๊ฐ๋ฐ๋๊ณ ๋ถํ๋๋ ๊ณผ์ ์์ Atom์ Immutable ํน์ฑ์ด ์ฌ๋ผ์ง๋ ๊ฒฝ์ฐ๋ ๋ง์ด ๋ฐ์ํ์ผ๋ฉฐ, ์ด๋ ์๋ง๋ ์ค์ฉ์ ์ธ ๋ชฉ์ ์ ์ํด ์ด๋ ๊ฒ ๋ ๊ฒ์ด ์๋๊น๋ผ๊ณ ์ถ์ธกํ๋ค.
4.2. ๋ฆฌ์คํธ[ํธ์ง]
๋ฆฌ์คํ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์๋ฅผ ์
์ ์๊ณ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฆฌ์คํธ๊ฐ ๊ธฐ๋ณธ ์๋ฃํ์ผ๋ก ์ฃผ์ด์ง๋ค. ๋ฆฌ์คํธ๋ ๊ทธ ์์ฒด๋ก Atom๊ณผ ํจ๊ป ๋ค๋ฅธ ๋ฆฌ์คํธ๊ฐ ์์๊ฐ ๋ ์ ์๋ค.
์ฌ๋ด์ผ๋ก ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ฆฌ์คํ ๋ฐฉ์ธ์ผ๋ก ์งํํ๊ฒ ๋๋ฉด ์ฝ๋ฉ ๋ถ๋์ด ํํ ์ค์ด๋๋ ์ ์ธ๊ณ๋ฅผ ๋ง๋ณผ ์ ์๋๋ฐ, ์ด๋ ๋ฆฌ์คํ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฆฌ์คํธ ์๋ฃํ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ธ ๊ฒ๋ ํ ๋ชซ ํ๋ค.(Python์ผ๋ก ํด๋ ์ ์ฌํ ๊ฒฝํ์ ํ ์ ์๋ค)
์ฌ๋ด์ผ๋ก ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ฆฌ์คํ ๋ฐฉ์ธ์ผ๋ก ์งํํ๊ฒ ๋๋ฉด ์ฝ๋ฉ ๋ถ๋์ด ํํ ์ค์ด๋๋ ์ ์ธ๊ณ๋ฅผ ๋ง๋ณผ ์ ์๋๋ฐ, ์ด๋ ๋ฆฌ์คํ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฆฌ์คํธ ์๋ฃํ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ธ ๊ฒ๋ ํ ๋ชซ ํ๋ค.(Python์ผ๋ก ํด๋ ์ ์ฌํ ๊ฒฝํ์ ํ ์ ์๋ค)
4.3. ๋ฌธ๋ฒ[ํธ์ง]
๋ฆฌ์คํ๋ ํํ์ ์งํฅ ์ธ์ด์ด๋ค. ์ฆ, ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ์คํ๊ฐ๋ฅํ๋ค.
ํํ์(expression) ์งํฅ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์์ ๊ฐ์ ๊ฐ์ง๋ค.
๋๋ค๋ฅธ ํน์ง์ผ๋ก ๋ฆฌ์คํ๋ ํจ์๋ฅผ ์ผ๊ธ๊ฐ์ฒด(first-class object)๋ก ๋ค๋ฃฌ๋ค. ์ฆ, ํจ์๋ฅผ ํจ์์ ์ธ์๋ก ๋ฐ์ ์ ์์ผ๋ฉฐ ๋ฆฌํด๊ฐ์ผ๋ก ์ง์ ํ ์๋ ์๋ค. ๋ํ ๋ฐํ์์์ ์์ฑํ ์๋ ์๋ค.
๋ํ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ ํ๊ธฐ๋ฒ(Prefix Notation)์ ์ฌ์ฉํ๋ค. ์ฆ, ํต์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ 1+2 ๋ฅผ ์ํํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋๋๋ฐ
๋ฆฌ์คํ์์๋ ๋ค์๊ณผ ๊ฐ์ด +์ด ์ ์ผ ์์ ๋์ค๊ณ ์ซ์๊ฐ ๋ค์ ํ๊ธฐ๋๋ ํ์์ ์ทจํ๋ค. ์ด๋ +๋ผ๋ ํจ์์ ์ซ์ 1๊ณผ 2์ธ ์ธ์๋ฅผ ์ฃผ์ด ํธ์ถํจ์ ๋ปํ๋ค.
์ด์ ๊ฐ์ด ๊ดํธ์ Atom์ ์ฌ์ฉํ์ฌ ํ๊ธฐํ๋ ๋ฐฉ๋ฒ์ ๋ฆฌ์คํ์์๋ S-Expression(Symbolic Expression) ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ด๊ฒ ๋๋ฌธ์ ๋ฆฌ์คํ์ ์์ค ์ฝ๋๋ ์ค์ฒฉ๊ดํธ์ ์ฐ์์ด ๋๋ค. ํ์ง๋ง ํธ์ง๊ธฐ(Emacs + SLIME)์์ ์๋์ผ๋ก ์ง์ด๋ง๋ ๊ดํธ๋ฅผ ํ์ํด์ฃผ๊ณ , ๋ค์ฌ์ฐ๊ธฐ๋ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ค์ ์ฝ๋ฉ์ ์์ด์ ๋ณ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค.
M-Expression(Meta Expression)์ด๋ผ๋ ๊ฒ์ด ์ด๊ธฐ ๋ฆฌ์คํ์ ์กด์ฌํ๋๋ฐ, ์ด๊ฒ์ ์ผ๋ฐ์ ์ธ ์ ์ฐจํ ์ธ์ด์์ ํจ์๋ฅผ ํธ์ถํ๋ ๊ตฌ๋ฌธ์ ๋ ์ฌ๋ฆฌ๋ฉด ๋๋ค. ๋ฆฌ์คํ๋ฅผ ์ต์ด๋ก ๊ตฌ์ํ MIT ์ธ๊ณต์ง๋ฅ ๋ฉ์ ๋งค์นด์๋ ํฌํธ๋ ๋ฑ ์ฃผ๋ณ์ ์ฌ๋ฌ ์ธ์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฆฌ์คํ๋ฅผ M-Expression ์ผ๋ก ํํํ๊ธฐ ์ํด ์ฐ๊ตฌ์ ๋ชฐ๋ํ์ง๋ง ๋ณ๋ค๋ฅธ ์ง์ ์ด ์์๊ณ ๊ทธ ์์ค์ M-exp ๋ณด๋ค S-exp ๋ฅผ ๋ ์ ํธํ๋ ์ ์ธ๋ ํ๋ก๊ทธ๋๋จธ๋ค์ด ๋ํ๋จ์ผ๋ก์จ ๊ทธ๋ฅ M-S ์นํ ์ฐ๊ตฌ๋ฅผ ํฌ๊ธฐํ์๋ค. ๋ณด๋ค ์์ธํ ์ ๋ณด๋ History of Lisp, ์ฐธ๊ณ ๋ก ์์ ์ธ๊ธํ ๋ด์ฉ์ ๋ง์ง๋ง ๋ฌธ๋จ์ ์๋ค.
(+ 1 (if t 2 3)) ;=> 3
t ๋ ๋ฆฌ์คํ์์ ์ฐธ๊ฐ์ ๋ํ๋ด๋ ๊ฐ์ด๋ค(ํ์ธ์ด์์ True ๋๋ true ์ ๊ฐ์)ํํ์(expression) ์งํฅ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์์ ๊ฐ์ ๊ฐ์ง๋ค.
๋๋ค๋ฅธ ํน์ง์ผ๋ก ๋ฆฌ์คํ๋ ํจ์๋ฅผ ์ผ๊ธ๊ฐ์ฒด(first-class object)๋ก ๋ค๋ฃฌ๋ค. ์ฆ, ํจ์๋ฅผ ํจ์์ ์ธ์๋ก ๋ฐ์ ์ ์์ผ๋ฉฐ ๋ฆฌํด๊ฐ์ผ๋ก ์ง์ ํ ์๋ ์๋ค. ๋ํ ๋ฐํ์์์ ์์ฑํ ์๋ ์๋ค.
(sort '(3 2 1) #'<) ;=> (1 2 3)
(mapcar #'(lambda (x) (1+ x)) '(1 2 3)) ;=> (2 3 4)
๋ํ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ ํ๊ธฐ๋ฒ(Prefix Notation)์ ์ฌ์ฉํ๋ค. ์ฆ, ํต์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ 1+2 ๋ฅผ ์ํํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋๋๋ฐ
1 + 2
๋ฆฌ์คํ์์๋ ๋ค์๊ณผ ๊ฐ์ด +์ด ์ ์ผ ์์ ๋์ค๊ณ ์ซ์๊ฐ ๋ค์ ํ๊ธฐ๋๋ ํ์์ ์ทจํ๋ค. ์ด๋ +๋ผ๋ ํจ์์ ์ซ์ 1๊ณผ 2์ธ ์ธ์๋ฅผ ์ฃผ์ด ํธ์ถํจ์ ๋ปํ๋ค.
(+ 1 2)
์ด์ ๊ฐ์ด ๊ดํธ์ Atom์ ์ฌ์ฉํ์ฌ ํ๊ธฐํ๋ ๋ฐฉ๋ฒ์ ๋ฆฌ์คํ์์๋ S-Expression(Symbolic Expression) ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ด๊ฒ ๋๋ฌธ์ ๋ฆฌ์คํ์ ์์ค ์ฝ๋๋ ์ค์ฒฉ๊ดํธ์ ์ฐ์์ด ๋๋ค. ํ์ง๋ง ํธ์ง๊ธฐ(Emacs + SLIME)์์ ์๋์ผ๋ก ์ง์ด๋ง๋ ๊ดํธ๋ฅผ ํ์ํด์ฃผ๊ณ , ๋ค์ฌ์ฐ๊ธฐ๋ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ค์ ์ฝ๋ฉ์ ์์ด์ ๋ณ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค.
M-Expression(Meta Expression)์ด๋ผ๋ ๊ฒ์ด ์ด๊ธฐ ๋ฆฌ์คํ์ ์กด์ฌํ๋๋ฐ, ์ด๊ฒ์ ์ผ๋ฐ์ ์ธ ์ ์ฐจํ ์ธ์ด์์ ํจ์๋ฅผ ํธ์ถํ๋ ๊ตฌ๋ฌธ์ ๋ ์ฌ๋ฆฌ๋ฉด ๋๋ค. ๋ฆฌ์คํ๋ฅผ ์ต์ด๋ก ๊ตฌ์ํ MIT ์ธ๊ณต์ง๋ฅ ๋ฉ์ ๋งค์นด์๋ ํฌํธ๋ ๋ฑ ์ฃผ๋ณ์ ์ฌ๋ฌ ์ธ์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฆฌ์คํ๋ฅผ M-Expression ์ผ๋ก ํํํ๊ธฐ ์ํด ์ฐ๊ตฌ์ ๋ชฐ๋ํ์ง๋ง ๋ณ๋ค๋ฅธ ์ง์ ์ด ์์๊ณ ๊ทธ ์์ค์ M-exp ๋ณด๋ค S-exp ๋ฅผ ๋ ์ ํธํ๋ ์ ์ธ๋ ํ๋ก๊ทธ๋๋จธ๋ค์ด ๋ํ๋จ์ผ๋ก์จ ๊ทธ๋ฅ M-S ์นํ ์ฐ๊ตฌ๋ฅผ ํฌ๊ธฐํ์๋ค. ๋ณด๋ค ์์ธํ ์ ๋ณด๋ History of Lisp, ์ฐธ๊ณ ๋ก ์์ ์ธ๊ธํ ๋ด์ฉ์ ๋ง์ง๋ง ๋ฌธ๋จ์ ์๋ค.
4.4. Homoiconicity, ๋๋ Code is data, data is code[ํธ์ง]
๋ฆฌ์คํ๋ ์ฒ์๋ถํฐ ํ๋์ ๋ฑ์ฅํ๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ฌ๋ฌ ๊ฐ์ง ๋ฉด์์ ๋ฌ๋๋ค. ๊ฐ์ฅ ํฐ ํน์ง์ผ๋ก๋ ์ฝ๋๊ฐ ๋ง์น ๋ฐ์ดํฐ์ฒ๋ผ ์ทจ๊ธ๋๋ค๋ ๊ฒ์ด์๋๋ฐ, ์ด๋ ๋ฐ์ดํฐ์ ์ฝ๋๊ฐ ๋ชจ๋ ๋ฆฌ์คํธ ํํ๋ก ํ๊ธฐ๋์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ๋ฆฌ์คํธ๋ ๋ฆฌ์คํ์์ ๊ฐ์ฅ ์ค์ํ ์์๋ก ๋ณผ ์ ์๋๋ฐ, ์ฝ๊ฒ ๋งํด ์๋ฃ๋ฅผ ์์๋ฅผ ๋งค๊ฒจ ์ ์ฅํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, (+ 1 2) ๋ผ๋ ๋ฆฌ์คํธ๋ฅผ ์
๋ ฅํ๋ฉด ์ฝ๋๋ก ํด์์ด ๋์ด(ํ๊ฐ, Evaluation) + ํจ์์ 1 ๊ณผ 2 ๋ฅผ ์ธ์๋ก ๋๊ฒจ์ฃผ๊ณ , 1+2 ๊ฐ ์ฐ์ฐ๋์ด 3 ์ ์ถ๋ ฅํ๋ฉฐ, ํ๊ฐํ์ง ๋ง๊ณ ๊ทธ๋๋ก ๋ฆฌ์คํธ๋ก ์ ์ฅํ๋ ' ๋ฅผ ๋ถ์ฌ์ '(+ 1 2) ๋ฅผ ์
๋ ฅํ๋ฉด ์ฒซ๋ฒ์งธ ์์๊ฐ +์ด๊ณ ๋๋ฒ์งธ ์์๊ฐ 1, ์ธ๋ฒ์งธ ์์๊ฐ 2์ธ ๋ฆฌ์คํธ๋ก ์ธ์๋๋ค. ์ฆ, ์ ๋ฆฌ์คํธ๋ฅผ ์ฝ๋๋ก ๋ณด๊ณ ๊ทธ๋๋ก ์คํํ ์๋ ์๊ณ , ์คํํ์ง ์๊ณ ๋ค๋ฅธ ํจ์์ ๋ฆฌ์คํธํ ๋ฐ์ดํฐ๋ก ๋๊ฒจ์ฃผ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค๋ ์๋ฆฌ.
์ฝ๋๋ฅผ ๋ฐ์ดํฐ๋ก ์ทจ๊ธํ ์ ์๋ค๋ ์ฅ์ ์ ํ์ ์ด, ์ ธ ์ธ์ด(scsh ๊ฐ์), ๋ฌธ์ ํธ์ง๊ธฐ(๋ํ์ ์ผ๋ก Emacs), ์ค๊ณ ์์คํ (CAD) ๊ฐ์ ์ํํธ์จ์ด์ ๊ธฐ๋ฅ์ ๋๋ฆฌ๋ ์ธ์ด๋ก ์ฌ์ฉ๋๊ฑฐ๋, ์ธ๊ณต์ง๋ฅ ๋ถ์ผ์ ๋ง์ด ์ฌ์ฉ๋๋ค. ๊ทธ ๋ฐ์ ์์ฐ์ด ์ฒ๋ฆฌ, ํด์ํ, ๊ฒ์ ์ด๋ก ๊ฐ์ ์ฌ๋ฌ ๋ถ์ผ์์ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉ๋๊ณ ์๋ค.
๋ฆฌ์คํ๊ฐ ์๋ ์ธ์ด ์ค์๋ ๋ฌผ๋ก ์ด๋ฐ ํน์ฑ์ ๊ฐ์ง ์ธ์ด๋ ์กด์ฌํ๋ค.io๊ฐ์ ์ธ์ด๊ฐ ์ด๋ฌํ ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ค.ํ์ง๋ง ์๋ฌด๋ ์ ์ฐ๊ณ ์๋ค Julia ์ธ์ด๋ ์ด ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ค.
์ฝ๋๋ฅผ ๋ฐ์ดํฐ๋ก ์ทจ๊ธํ ์ ์๋ค๋ ์ฅ์ ์ ํ์ ์ด, ์ ธ ์ธ์ด(scsh ๊ฐ์), ๋ฌธ์ ํธ์ง๊ธฐ(๋ํ์ ์ผ๋ก Emacs), ์ค๊ณ ์์คํ (CAD) ๊ฐ์ ์ํํธ์จ์ด์ ๊ธฐ๋ฅ์ ๋๋ฆฌ๋ ์ธ์ด๋ก ์ฌ์ฉ๋๊ฑฐ๋, ์ธ๊ณต์ง๋ฅ ๋ถ์ผ์ ๋ง์ด ์ฌ์ฉ๋๋ค. ๊ทธ ๋ฐ์ ์์ฐ์ด ์ฒ๋ฆฌ, ํด์ํ, ๊ฒ์ ์ด๋ก ๊ฐ์ ์ฌ๋ฌ ๋ถ์ผ์์ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉ๋๊ณ ์๋ค.
๋ฆฌ์คํ๊ฐ ์๋ ์ธ์ด ์ค์๋ ๋ฌผ๋ก ์ด๋ฐ ํน์ฑ์ ๊ฐ์ง ์ธ์ด๋ ์กด์ฌํ๋ค.io๊ฐ์ ์ธ์ด๊ฐ ์ด๋ฌํ ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ค.
4.5. ๋๋ค ํจ์[ํธ์ง]
์ฌ์ค ๋ฆฌ์คํ๋ Lambda Calculus๋ฅผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ํํ๋ก ๊ตฌํํ ๊ฒ์ ์ฌ๋ฌ ๊ฐ์ง ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๊ฒ์ ์ง๋์ง ์๋๋ค๊ณ ํ ์ ์๋ค. ๋ฐ๋ผ์ ์์ ์ต๋ช
ํจ์๋ฅผ ๋ปํ๋ Lambda Function ๋ ์ ์ํ์ฌ ์ฌ์ฉํ ์ ์๋ค. ์ด ์์ฒด๋ง์ผ๋ก๋ "ํํ ๊ฐ๋ฅ"ํ๋ค๋ ๊ฒ ์ธ์ ์๋ฏธ๊ฐ ์์ง๋ง ๋ฆฌ์คํ ๊ณํต ์ธ์ด์์ ์ฃผ์ด์ง๋ ๊ธฐ๋ณธ ํจ์๋ API ๋ค์ด ์ด๋ฅผ ์ ๊ทน ์ฌ์ฉํ์ฌ ์ฝ๋ฉ ๋
ธ๊ฐ๋ค๋ฅผ ์ค์ด๋ฉด์ ๋์์ ํธ๋ฆฌํ๊ฒ ์ฝ๋ฉ์ ํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ฐ๋ ฅํ ์์์ด๋ค.
์๋ฅผ ๋ค์ด ์๋ฐ 7 ์ดํ์ API์์ ์ง์ํ๋ ์ปฌ๋ ์ ์ ๋ ฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด Comparator ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ compare ๋ฉ์๋๋ฅผ ๊ตฌํํด์ผ ํ๋ค. ์ฆ, ๊ณ ์ ์ด๊ฑฐ ํ๋ ํ๋ ค๊ณ ํด๋์ค๋ฅผ ํ๋ ๋ ๋ง๋ค์ด์ผ ํ๋ค. ํ์ง๋ง ๋ฆฌ์คํ์์๋ ๊ทธ๋ฅ ๋๋ค ํจ์๋ก ๋์๋น๊ต๋ฅผ ํ ์ ์๋ ์ต๋ช ํจ์๋ฅผ ์ ์ํด์ ํ๋ผ๋ฏธํฐ๋ก ๋๊ธฐ๋ฉด ๋์ด๋ค. ์๋ฐ๋ 8 ๋ถํฐ ์ด๋ฌํ ๋๋ค ํํ์์ ์์ฉํ์ฌ ๋ณด๋ค ํธ๋ฆฌํ๊ฒ ์ฝ๋ฉํ ์ ์๊ฒ ๋์๋ค.
์๋ฅผ ๋ค์ด ์๋ฐ 7 ์ดํ์ API์์ ์ง์ํ๋ ์ปฌ๋ ์ ์ ๋ ฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด Comparator ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ compare ๋ฉ์๋๋ฅผ ๊ตฌํํด์ผ ํ๋ค. ์ฆ, ๊ณ ์ ์ด๊ฑฐ ํ๋ ํ๋ ค๊ณ ํด๋์ค๋ฅผ ํ๋ ๋ ๋ง๋ค์ด์ผ ํ๋ค. ํ์ง๋ง ๋ฆฌ์คํ์์๋ ๊ทธ๋ฅ ๋๋ค ํจ์๋ก ๋์๋น๊ต๋ฅผ ํ ์ ์๋ ์ต๋ช ํจ์๋ฅผ ์ ์ํด์ ํ๋ผ๋ฏธํฐ๋ก ๋๊ธฐ๋ฉด ๋์ด๋ค. ์๋ฐ๋ 8 ๋ถํฐ ์ด๋ฌํ ๋๋ค ํํ์์ ์์ฉํ์ฌ ๋ณด๋ค ํธ๋ฆฌํ๊ฒ ์ฝ๋ฉํ ์ ์๊ฒ ๋์๋ค.
4.6. ๋งคํฌ๋ก[ํธ์ง]
๋ฆฌ์คํ์ ๋๋ณด์ด๋ ํน์ง ์ค ํ๋๋ก ๋งคํฌ๋ก๊ฐ ์๋ค. ์ด๊ฒ์ ์ฌ์ฉํ๋ฉด ์ํ๋ ๋ฐ์ ๋ฐ๋ผ ํจ์ํ์ผ๋ก๋, ์ ์ฐจํ์ผ๋ก๋, OOP๋ก๋, ๋
ผ๋ฆฌํ์ผ๋ก๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋๋จธ๋ค์ ์ฐ์๊ฐ์ด ์ฉ๊ธฐ๋ก ์ ๋ช
ํ๋ค
์ด ๊ธฐ๋ฅ์ ๋งค์ฐ ์ฝ๊ฒ ๋งํด์ C ์ธ์ด์ #define๊ณผ ์ ์ฌํ์ง๋ง ํจ์ฌ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. C์ #define์ ์์ค ์ฝ๋์ ์ ์ฒ๋ฆฌ๊ธฐ์ ์ํด ๋ฏธ๋ฆฌ ์ ์๋ ๋ด์ฉ์ ์์ค ์ฝ๋ ์์ค์์ ์นํํ๋ ๋ฐ ๊ทธ์น์ง๋ง, ๋ฆฌ์คํ์ ๋งคํฌ๋ก๋ ๋ชจ๋ ๊ฒ์ ๋ฆฌ์คํธ์ ๋ค์ด์๋ ๋ด์ฉ์ผ๋ก ์นํํ๋ ๋์, ์คํ ๋์ค์ ๋ฏธ๋ฆฌ ์ ์๋ ํ๋ก๊ทธ๋จ์ผ๋ก ์ง์ ์นํ๋๋ค. ์ฆ, ๋งคํฌ๋ก ์์ฒด๊ฐ ์ ๋ ฅ๋๋ ๋ฆฌ์คํธ์ ๋ด์ฉ์ ๋ฏธ๋ฆฌ ์ ์๋ ๋ฆฌ์คํธ์ ๋ด์ฉ์ผ๋ก ๋์ฒดํ๋ ํจ์์ด๋ค.
๋ฆฌ์คํ์ ํน์ฑ๊ณผ ๋ง๋ฌผ๋ฆฐ ์ด ๊ธฐ๋ฅ์ด ๋๋ฌด๋ ๊ฐ๋ ฅํ๊ธฐ ๋๋ฌธ์, ๋ฆฌ์คํ๋ (์๊ธฐ์์ ์) ํ๋ก๊ทธ๋๋ฐ ํ ์ ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด(Programmable programming language[1])๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ฉฐ, ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ฆฌ์คํ ๋ด์์ ์๋ก์ด ๋ฌธ๋ฒ์ ์ ์ํ๋ฉฐ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํ ์ ๋๋ก ๊ฐ๋ ฅํ๋ค. ๋ฐ๋ผ์ ์๋ก์ด ํจ๋ฌ๋ค์์ด ๋ํ๋๋ ๋ฆฌ์คํ ๋ด์์ ๊ทธ ๊ธฐ๋ฅ์ ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ ํ, ๋์ผํ ๋ฆฌ์คํ ์ธ์ด๋ก, ๋์ผํ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ฉฐ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ง ๊ฐ๋ฅํ๋ค.[2] ๋ฆฌ์คํ๋ก ๋ง๋ค์ด์ง ํ๋ก๊ทธ๋จ๋ค๋ ์ด๋ฐ ํน์ง์ ์ด์ด๋ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, ๋ฆฌ์คํ์ ์ด๋ฐ ํน์ง์ ํ๊ณ๊น์ง ๋์ด๋ธ ์ด๋งฅ์ค๋ ์์ฒด ๊ธฐ๋ฅ์ ๊ฑฐ์ ์ ๋ถ ์ปค์คํฐ๋ง์ด์ง์ด ๊ฐ๋ฅํ๋ฉฐ ์๋ํฐ๊ฐ ์๋๋ผ ๊ทธ๋ฅ ๊ฑฐ๋ํ ๋ฆฌ์คํ ์ธํฐํ๋ฆฌํฐ๋ผ๋ ํ๊ฐ๋ฅผ ๋ฐ๋๋ค.(...)
ํ์ง๋ง ๊ธฐ๋ฅ์ด ๊ฐ๋ ฅํ ๋งํผ ์๋ ์ ๊ฒ ๊ฐ์ ์กด์ฌ๊ฐ ๋ฐ๋ก ์ด ๋งคํฌ๋ก์ด๋ค. ๋ ํผ์์๋ง ์์ ํ๋ ๊ฒฝ์ฐ๋ฉด ์๊ด์์ผ๋ ์ฌ๋ฌ ์ฌ๋์ด ์์ฑํ๋ ํ๋ก๊ทธ๋จ์์ ์ฌ์ ์ ์ถฉ๋ถํ ํ์ ์์ด ๋ง๋ค์ด ์ฐ๋ ๋งคํฌ๋ก๋ ํ๋ก๊ทธ๋จ ์ ์ฒด์ ๋ ์ด ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค. ๋จผ์ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ค๋ช ์ ๋ฃ๊ฑฐ๋ ํด๋น ๋งคํฌ๋ก์ ์์ค์ฝ๋๋ฅผ ์์ ํ ์ดํดํ๊ธฐ ์ ์๋ ์ฝ๋๋ฅผ ํด๋ ํ๊ฑฐ๋ ์ฌ์ฉํ๊ธฐ ํ๋ค๊ณ , ์ฌ๋ฌ ๋ช ์ด ๊ณต๋ ์์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ค๋ ์์ฒด๊ฐ ํ๋ก๊ทธ๋จ์ ๋ฉ์น๊ฐ ๊ฝค ํฌ๋ค๋ ๊ฒ์ ๋ปํ๊ธฐ ๋๋ฌธ์ ์ถฉ๋ถํ ์ฌ์ ๊ฒํ ๋ ํ์ ์์ด ๋ง๋ค์ด์ง ๋งคํฌ๋ก๋ ์ ๋ง๋๋ ๋ชปํ๋ ๊ฒฝ์ฐ๋ ์ถฉ๋ถํ ์์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ , ์ฑ๋ฅ์์ ๋ฌธ์ ๋ ๊ธฐํ ๋ค๋ฅธ ์ด์ ๋๋ฌธ์ ๋งคํฌ๋ก๊ฐ ์๋ ๊ตฌํ์ฒด๋ ๊ฝค ๋ง์ด ์กด์ฌํ๋ค.
์ด ๊ธฐ๋ฅ์ ๋งค์ฐ ์ฝ๊ฒ ๋งํด์ C ์ธ์ด์ #define๊ณผ ์ ์ฌํ์ง๋ง ํจ์ฌ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. C์ #define์ ์์ค ์ฝ๋์ ์ ์ฒ๋ฆฌ๊ธฐ์ ์ํด ๋ฏธ๋ฆฌ ์ ์๋ ๋ด์ฉ์ ์์ค ์ฝ๋ ์์ค์์ ์นํํ๋ ๋ฐ ๊ทธ์น์ง๋ง, ๋ฆฌ์คํ์ ๋งคํฌ๋ก๋ ๋ชจ๋ ๊ฒ์ ๋ฆฌ์คํธ์ ๋ค์ด์๋ ๋ด์ฉ์ผ๋ก ์นํํ๋ ๋์, ์คํ ๋์ค์ ๋ฏธ๋ฆฌ ์ ์๋ ํ๋ก๊ทธ๋จ์ผ๋ก ์ง์ ์นํ๋๋ค. ์ฆ, ๋งคํฌ๋ก ์์ฒด๊ฐ ์ ๋ ฅ๋๋ ๋ฆฌ์คํธ์ ๋ด์ฉ์ ๋ฏธ๋ฆฌ ์ ์๋ ๋ฆฌ์คํธ์ ๋ด์ฉ์ผ๋ก ๋์ฒดํ๋ ํจ์์ด๋ค.
๋ฆฌ์คํ์ ํน์ฑ๊ณผ ๋ง๋ฌผ๋ฆฐ ์ด ๊ธฐ๋ฅ์ด ๋๋ฌด๋ ๊ฐ๋ ฅํ๊ธฐ ๋๋ฌธ์, ๋ฆฌ์คํ๋ (์๊ธฐ์์ ์) ํ๋ก๊ทธ๋๋ฐ ํ ์ ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด(Programmable programming language[1])๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ฉฐ, ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ฆฌ์คํ ๋ด์์ ์๋ก์ด ๋ฌธ๋ฒ์ ์ ์ํ๋ฉฐ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํ ์ ๋๋ก ๊ฐ๋ ฅํ๋ค. ๋ฐ๋ผ์ ์๋ก์ด ํจ๋ฌ๋ค์์ด ๋ํ๋๋ ๋ฆฌ์คํ ๋ด์์ ๊ทธ ๊ธฐ๋ฅ์ ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ ํ, ๋์ผํ ๋ฆฌ์คํ ์ธ์ด๋ก, ๋์ผํ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ฉฐ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ง ๊ฐ๋ฅํ๋ค.[2] ๋ฆฌ์คํ๋ก ๋ง๋ค์ด์ง ํ๋ก๊ทธ๋จ๋ค๋ ์ด๋ฐ ํน์ง์ ์ด์ด๋ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, ๋ฆฌ์คํ์ ์ด๋ฐ ํน์ง์ ํ๊ณ๊น์ง ๋์ด๋ธ ์ด๋งฅ์ค๋ ์์ฒด ๊ธฐ๋ฅ์ ๊ฑฐ์ ์ ๋ถ ์ปค์คํฐ๋ง์ด์ง์ด ๊ฐ๋ฅํ๋ฉฐ ์๋ํฐ๊ฐ ์๋๋ผ ๊ทธ๋ฅ ๊ฑฐ๋ํ ๋ฆฌ์คํ ์ธํฐํ๋ฆฌํฐ๋ผ๋ ํ๊ฐ๋ฅผ ๋ฐ๋๋ค.(...)
ํ์ง๋ง ๊ธฐ๋ฅ์ด ๊ฐ๋ ฅํ ๋งํผ ์๋ ์ ๊ฒ ๊ฐ์ ์กด์ฌ๊ฐ ๋ฐ๋ก ์ด ๋งคํฌ๋ก์ด๋ค. ๋ ํผ์์๋ง ์์ ํ๋ ๊ฒฝ์ฐ๋ฉด ์๊ด์์ผ๋ ์ฌ๋ฌ ์ฌ๋์ด ์์ฑํ๋ ํ๋ก๊ทธ๋จ์์ ์ฌ์ ์ ์ถฉ๋ถํ ํ์ ์์ด ๋ง๋ค์ด ์ฐ๋ ๋งคํฌ๋ก๋ ํ๋ก๊ทธ๋จ ์ ์ฒด์ ๋ ์ด ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค. ๋จผ์ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ค๋ช ์ ๋ฃ๊ฑฐ๋ ํด๋น ๋งคํฌ๋ก์ ์์ค์ฝ๋๋ฅผ ์์ ํ ์ดํดํ๊ธฐ ์ ์๋ ์ฝ๋๋ฅผ ํด๋ ํ๊ฑฐ๋ ์ฌ์ฉํ๊ธฐ ํ๋ค๊ณ , ์ฌ๋ฌ ๋ช ์ด ๊ณต๋ ์์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ค๋ ์์ฒด๊ฐ ํ๋ก๊ทธ๋จ์ ๋ฉ์น๊ฐ ๊ฝค ํฌ๋ค๋ ๊ฒ์ ๋ปํ๊ธฐ ๋๋ฌธ์ ์ถฉ๋ถํ ์ฌ์ ๊ฒํ ๋ ํ์ ์์ด ๋ง๋ค์ด์ง ๋งคํฌ๋ก๋ ์ ๋ง๋๋ ๋ชปํ๋ ๊ฒฝ์ฐ๋ ์ถฉ๋ถํ ์์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ , ์ฑ๋ฅ์์ ๋ฌธ์ ๋ ๊ธฐํ ๋ค๋ฅธ ์ด์ ๋๋ฌธ์ ๋งคํฌ๋ก๊ฐ ์๋ ๊ตฌํ์ฒด๋ ๊ฝค ๋ง์ด ์กด์ฌํ๋ค.
4.7. Lisp 1, Lisp 2[ํธ์ง]
4.7.1. Lisp 1[ํธ์ง]
์ด๊ธฐ์ ๋ฆฌ์คํ๋ ๋ณดํต ๋งํ๋ ๋ณ์์ ํจ์์ ์ด๋ฆ์ด ๊ฒน์น ์ ์์๋ค. ์ฆ, ํจ์์ ์ฌ์ฉ๋๋ ์ฌ๋ณผ๊ณผ ๊ฐ์ ๋ํ๋ด๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ฌ๋ณผ์ด ๊ฒน์น ์ ์์๋ค. ์์ฆ ์์ผ๋ก ํํํ๋ฉด ๋์ด ๊ฐ์ ๋ค์ ์คํ์ด์ค๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์๋๋ค. ๋ค์์ Lisp 1์ธ Clojure ์์ ์ฝ๋๋ก, a์ ๊ฐ 4๋ฅผ ํ ๋นํ๊ณ , ์ดํ 2๋ฅผ ๊ณฑํ๋ ํจ์๋ฅผ ์ ์ํ ํ aํจ์์ ๊ฐ a์ ์ฌ๋ณผ์ ๋๊ฒจ์ ํธ์ถ์ ์๋ํ๋ ์ฝ๋์ด๋ค. Clojure๋ Lisp 1์ด๊ธฐ ๋๋ฌธ์ ๋น์ฐํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
user=> (def a 4)
#'user/a
;; ์๋ซ์ค์์ ์ฌ๋ณผ a ๋ (fn [x] (* x 2)) ํจ์๋ก ๋ฐ๋๋ค.
user=> (defn a [x] (* x 2))
#'user/a
user=> (a a)
ClassCastException user$a cannot be cast to java.lang.Number clojure.lang.Numbers.multiply (Numbers.java:146)
;; ํจ์์ธ a๋ฅผ ๋ฐ์์ *๋ฅผ ์ํํ๋ clojure.lang.Number.multiply์ ์ ๋ฌํ์ผ๋ฏ๋ก, ์๋์ผ๋ก ํ๋ณํ์ ํ ์ ์๋ค๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
4.7.2. Lisp 2[ํธ์ง]
1966๋
์ ์ ์๋ ๊ฐ๋
์ผ๋ก, Lisp 1๊ณผ ๋ฌ๋ฆฌ ํจ์ ์ฌ๋ณผ๊ณผ ๊ฐ ์ฌ๋ณผ์ ๋ค์์คํ์ด์ค๋ฅผ ๋ถ๋ฆฌ์์ผฐ๋ค. ์ด๊ฒ์ด Common Lisp ํ์ค ์ฌ์์ ํฌํจ๋๋ฉด์ ๋๋ฆฌ ์๋ ค์ง๊ฒ ๋์๋ค. ๋ค์ ์์ ์ฝ๋๋ ์์ Clojure ์์ ์ ๋์ผํ ๋ด์ฉ์ ์ฝ๋๋ก, Common Lisp์์ ์๋ฌด๋ฐ ๋ฌธ์ ์์ด ์คํ๋๋ค.
ํ์ง๋ง ํด๋น ์ฌ๋ณผ์ด ํจ์ ์ฌ๋ณผ์์ ๋ํ๋ด๋ #'์ ๋ถ์ฌ์ a๋ฅผ ๋๊ธฐ๋ฉด Clojure์ ์ ์ฌํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
[1]> (setq a 4)
4
[2]> (defun a (x) (* x 2))
A
[3]> (a a)
8
ํ์ง๋ง ํด๋น ์ฌ๋ณผ์ด ํจ์ ์ฌ๋ณผ์์ ๋ํ๋ด๋ #'์ ๋ถ์ฌ์ a๋ฅผ ๋๊ธฐ๋ฉด Clojure์ ์ ์ฌํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
[4]> (a #'a)
*** - *: #<FUNCTION A (X) (DECLARE (SYSTEM::IN-DEFUN A)) (BLOCK A (* X 2))> is
not a number
The following restarts are available:
USE-VALUE :R1 Input a value to be used instead.
ABORT :R2 Abort main loop
Break 1 [5]>
5. SICP์ ๋ฆฌ์คํ์ ๋ํ ์คํด[ํธ์ง]
Structure and Interpretation of Computer Programs, ์ผ๋ช
SICP๋ ์ปดํจํฐ ๊ณผํ ์
๋ฌธ์์ด๋ฉฐ, Stream, Continuation, Closure ๋ฑ ๋งค์ฐ ๊ธฐ์ด์ ์ด๊ณ ๊ธฐ๋ณธ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋
์ ์ฌ๋์๊ฒ ๊ณต๋ถํ ์ ์๋ ๋ช
์ ์ด๋ค. ๊ทธ๋ฐ๋ฐ, ์ฑ
์์ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๋ฆฌ์คํ์ ์ฌํฌ๋ฆฌ์ค ํ๋์ธ Scheme์ด๋ค. ๋ฐ๋ผ์ ๋ฆฌ์คํ๋ฅผ ์ ํ๋ ค๋ฉด ์ด ์ฑ
์ ๋ฐ๋์ ๊ณต๋ถํด์ผ๋ง ํ ๊ฒ ๊ฐ์ ๋๋์ ์ฃผ๊ณ , ์ค์ ๋ก ๋ฆฌ์คํ๋ฅผ ๊ณต๋ถํ๊ธฐ ์ํด ์ด ์ฑ
์ ์ฐพ๋ ์ฌ๋๋ ๋ง๋ค.
์ฌ์ค, ๋๋ถ๋ถ์ ์ปดํจํฐ ๊ณตํ ์ ๋ฌธ์ด ํ๋ก๊ทธ๋๋ฐ ์์ฒด๋ณด๋ค ํน์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ต๋ํ๋๋ฐ ์ง์คํ๋ ๊ฒฝํฅ์ด ์๋๋ฐ, SICP๋ ์๋ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ์ด ๊ฐ๋ ์ ๊ณต๋ถํ๊ธฐ ์ํ ์ฑ ์ด๋ค. ๊ณต๋ถํ๋๋ฐ ํ์ํ ๋๊ตฌ๋ก Scheme์ด ์ ํ๋ ๊ฒ์ผ ๋ฟ.๋ฌผ๋ก ์ ์์ธ Sussman์ด Scheme์ ๋ง๋ค๊ธฐ๋ ํ๋ค(์ค์ ํธ์
์์ด SICP์์ ์ฌ์ฉํ๋ Scheme ์ฝ๋๋ค์ ์ ๋ถ ๊ตฌ๋ ๊ฐ๋ฅํ Scheme ์ปดํ์ผ๋ฌ๋ ์ฐพ์๋ณด๊ธฐ ํ๋ค๋ค)
MIT์์๋ 1980๋ ์ ์์๋ 6.001 SICP ๊ฐ์๊ฐ 2008๋ ์ 6.01 "Introduction to Electrical Engineering and Computer Science I" ๊ฐ์๋ก ๋ณ๊ฒฝ๋๋ฉด์ Python์ ์ฌ์ฉํ๊ฒ ๋์๋ค. ๊ฐ์ ๋ชฉ์ ๋ ์ ์ฐํ์ ๊ธฐ์ด ๊ฐ๋ ์ ๊ฐ๋ฅด์น๋ ๊ฒ์์ Python์ ๊ฐ๋ฅด์น๋ ๊ฒ์ผ๋ก ๋ฐ๋์๋ค. ์ด ์๊ธฐ์, Scheme์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์ฌ๋ฌ ๊ฐ์๋ ๋ชจ๋ Python์ ์ฐ๋ ๊ฒ์ผ๋ก ๋ฐ๋์๋ค๊ณ ํ๋ค. ๋์ค์, ์ด์ ์ 6.001๊ณผ ๊ฐ์ ๊ณผ๋ชฉ์ด๋ฉด์ Scheme์ ์ฌ์ฉํ๋ 6.037์ด 2011๋ ์์๋์๋ค.
Gerald Sussman์ด ์ง์ ๋ฐํ Scheme์ ์ฌ์ฉํ๋ MIT์ 6.001์ด Python ์ ์ฌ์ฉํ๋ 6.01๋ก ๋ฐ๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค. (1) Sussman๊ณผ Hal Abelson์ 1980๋ ๋๋ถํฐ ๊ฐ๋ฅด์ณ ์จ ์ด ๊ณผ๋ชฉ์ ๋ํด ํผ๋ก๊ฐ์ ๋๊ผ๊ณ , 1997๋ ์ ํ๊ณผ์ฅ ์ฌ๋ฌด์ค๋ก ์ฐพ์๊ฐ์ "์ด ๊ณผ๋ชฉ์ ๋ ์ด์ ๊ฐ๋ฅด์น์ง ์๊ฒ ๋ค"๋ ์๊ฒฌ์ ์ ๋ฌํ๋ค๊ณ ํ๋ค. (2) ๋์ฑ์ด, SICP ์ปค๋ฆฌํ๋ผ์ด ๋ ์ด์ ์ค๋๋ ์ ์์ง๋์ด๋ง์ ์ ํฉํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์ค๋ช ํ๋ค.
Sussman์ด ์ค๋ช ํ๋ ์ค๋๋ ์ ์์ง๋์ด๋, ์๋ฒฝํ๊ฒ ์ดํดํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ(๋๋ก๋ ์์ ์ ๋ณดํธ์ ์ฑ ์ ์ํด ๋ด๋ถ๊ฐ ๊ณต๊ฐ๋์ง ์์์ ์๋ฒฝํ๊ฒ ์ดํดํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ) ๋งค์ฐ ๋ณต์กํ ํ๋์จ์ด๋ฅผ ์ํ ์ฝ๋๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์์ฑํ๋ค. ์ํํธ์จ์ด ๋ํ ๋ฐฉ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ํํธ์จ์ด์ชฝ๋ ํ๋์จ์ด์ ๋์ผํ ํ๊ฒฝ์ ์ฒํด์๋ค. Sussman์ ์์ ์ด ๊ฐ๋ฅด์น๋ ํ์๋ค์ด ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ฎ์ด์ ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ธฐ ์ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋งค๋ด์ผ์ ์ฝ๋ ๋ฐ์ ๋๋ถ๋ถ์ ์๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณด์์๋ค๊ณ ํ๋ค. ๋ฐ๋ผ์ ์๊ณ ๋จ์ํ ๋ถ๋ถ๋ค์ ์ฌ์ฉํ์ฌ ํฐ ์์คํ ์ ๋ง๋๋ SICP์ "ํฉ์ฑ์ ํตํ ๋ถ์(analysis-by-synthesis)" ๊ด์ ์ ๋ ์ด์ ์ ํจํ์ง ์๊ฒ ๋์๋ค๊ณ ํ๋ค. ์ค๋๋ ์๋ ์ผ๋จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ฅ์ ์คํํ๋ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์ด๊ฒ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง๋ฅผ ๊ด์ฐฐํ๊ณ , ์ด๋ฅผ ์์ง๋์ด๊ฐ ์ํ๋ ์๋๋๋ก ์กฐ์ํ ์ ์๋์ง๋ฅผ ๊ณ ๋ฏผํ๊ฒ ๋๋ ์(poking๋ฐฉ์)์ผ๋ก ์ํํธ์จ์ด๋ฅผ ์์ฑํ๊ฒ ๋๋ค๊ณ ํ๋ค. (์ฐธ์กฐ)
๋ฆฌ์คํ ์์ฒด ๋๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ดํดํ๋ ๋ฐ์๋ SICP๋ณด๋ค๋ John Allen, "Anatomy of Lisp", McGraw-Hill, 1980 (ISBN: 978-0070011151)์ด ๋ ๋์ ์ ํ์ผ ์ ์๋ค.
์ฌ์ค, ๋๋ถ๋ถ์ ์ปดํจํฐ ๊ณตํ ์ ๋ฌธ์ด ํ๋ก๊ทธ๋๋ฐ ์์ฒด๋ณด๋ค ํน์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ต๋ํ๋๋ฐ ์ง์คํ๋ ๊ฒฝํฅ์ด ์๋๋ฐ, SICP๋ ์๋ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ์ด ๊ฐ๋ ์ ๊ณต๋ถํ๊ธฐ ์ํ ์ฑ ์ด๋ค. ๊ณต๋ถํ๋๋ฐ ํ์ํ ๋๊ตฌ๋ก Scheme์ด ์ ํ๋ ๊ฒ์ผ ๋ฟ.
MIT์์๋ 1980๋ ์ ์์๋ 6.001 SICP ๊ฐ์๊ฐ 2008๋ ์ 6.01 "Introduction to Electrical Engineering and Computer Science I" ๊ฐ์๋ก ๋ณ๊ฒฝ๋๋ฉด์ Python์ ์ฌ์ฉํ๊ฒ ๋์๋ค. ๊ฐ์ ๋ชฉ์ ๋ ์ ์ฐํ์ ๊ธฐ์ด ๊ฐ๋ ์ ๊ฐ๋ฅด์น๋ ๊ฒ์์ Python์ ๊ฐ๋ฅด์น๋ ๊ฒ์ผ๋ก ๋ฐ๋์๋ค. ์ด ์๊ธฐ์, Scheme์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์ฌ๋ฌ ๊ฐ์๋ ๋ชจ๋ Python์ ์ฐ๋ ๊ฒ์ผ๋ก ๋ฐ๋์๋ค๊ณ ํ๋ค. ๋์ค์, ์ด์ ์ 6.001๊ณผ ๊ฐ์ ๊ณผ๋ชฉ์ด๋ฉด์ Scheme์ ์ฌ์ฉํ๋ 6.037์ด 2011๋ ์์๋์๋ค.
Gerald Sussman์ด ์ง์ ๋ฐํ Scheme์ ์ฌ์ฉํ๋ MIT์ 6.001์ด Python ์ ์ฌ์ฉํ๋ 6.01๋ก ๋ฐ๋ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค. (1) Sussman๊ณผ Hal Abelson์ 1980๋ ๋๋ถํฐ ๊ฐ๋ฅด์ณ ์จ ์ด ๊ณผ๋ชฉ์ ๋ํด ํผ๋ก๊ฐ์ ๋๊ผ๊ณ , 1997๋ ์ ํ๊ณผ์ฅ ์ฌ๋ฌด์ค๋ก ์ฐพ์๊ฐ์ "์ด ๊ณผ๋ชฉ์ ๋ ์ด์ ๊ฐ๋ฅด์น์ง ์๊ฒ ๋ค"๋ ์๊ฒฌ์ ์ ๋ฌํ๋ค๊ณ ํ๋ค. (2) ๋์ฑ์ด, SICP ์ปค๋ฆฌํ๋ผ์ด ๋ ์ด์ ์ค๋๋ ์ ์์ง๋์ด๋ง์ ์ ํฉํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์ค๋ช ํ๋ค.
Sussman์ด ์ค๋ช ํ๋ ์ค๋๋ ์ ์์ง๋์ด๋, ์๋ฒฝํ๊ฒ ์ดํดํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ(๋๋ก๋ ์์ ์ ๋ณดํธ์ ์ฑ ์ ์ํด ๋ด๋ถ๊ฐ ๊ณต๊ฐ๋์ง ์์์ ์๋ฒฝํ๊ฒ ์ดํดํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ) ๋งค์ฐ ๋ณต์กํ ํ๋์จ์ด๋ฅผ ์ํ ์ฝ๋๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์์ฑํ๋ค. ์ํํธ์จ์ด ๋ํ ๋ฐฉ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ํํธ์จ์ด์ชฝ๋ ํ๋์จ์ด์ ๋์ผํ ํ๊ฒฝ์ ์ฒํด์๋ค. Sussman์ ์์ ์ด ๊ฐ๋ฅด์น๋ ํ์๋ค์ด ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ฎ์ด์ ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ธฐ ์ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋งค๋ด์ผ์ ์ฝ๋ ๋ฐ์ ๋๋ถ๋ถ์ ์๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณด์์๋ค๊ณ ํ๋ค. ๋ฐ๋ผ์ ์๊ณ ๋จ์ํ ๋ถ๋ถ๋ค์ ์ฌ์ฉํ์ฌ ํฐ ์์คํ ์ ๋ง๋๋ SICP์ "ํฉ์ฑ์ ํตํ ๋ถ์(analysis-by-synthesis)" ๊ด์ ์ ๋ ์ด์ ์ ํจํ์ง ์๊ฒ ๋์๋ค๊ณ ํ๋ค. ์ค๋๋ ์๋ ์ผ๋จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ฅ์ ์คํํ๋ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์ด๊ฒ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง๋ฅผ ๊ด์ฐฐํ๊ณ , ์ด๋ฅผ ์์ง๋์ด๊ฐ ์ํ๋ ์๋๋๋ก ์กฐ์ํ ์ ์๋์ง๋ฅผ ๊ณ ๋ฏผํ๊ฒ ๋๋ ์(poking๋ฐฉ์)์ผ๋ก ์ํํธ์จ์ด๋ฅผ ์์ฑํ๊ฒ ๋๋ค๊ณ ํ๋ค. (์ฐธ์กฐ)
๋ฆฌ์คํ ์์ฒด ๋๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ดํดํ๋ ๋ฐ์๋ SICP๋ณด๋ค๋ John Allen, "Anatomy of Lisp", McGraw-Hill, 1980 (ISBN: 978-0070011151)์ด ๋ ๋์ ์ ํ์ผ ์ ์๋ค.
6. ์ด์ผ๊ธฐ๊ฑฐ๋ฆฌ[ํธ์ง]
๋ฆฌ์คํ์ ๊ด๋ จ๋ ๊ฒฉ์ธ(?)์ผ๋ก Greenspun's tenth rule์ด๋ผ๋ ๊ฒ ์๋ค.[3]
Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.
์ค๋ช
ํ์๋ฉด, ์ปค๋จผ ๋ฆฌ์คํ์ ์ฌ๋ฌ๊ฐ์ง ๊ฐ๋ ฅํ ๊ธฐ๋ฅ๋ค์ ํ๋ก๊ทธ๋จ์ด ์ด๋์ ๋ ๋ณต์กํด์ง๋ฉด ์ด๋๊ฐ์ ๋ฐ๋์ ํ์ํ๊ฒ ๋๊ณ , ๊ทธ๋ฐ ๊ธฐ๋ฅ์ ๊ฐ๊ณ ์์ง ์์ C์ ๊ฐ์ ์ธ์ด๋ก ๊ทธ๋ฐ ๋ณต์กํ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๋ฉด, ๊ฒฐ๊ตญ ๋ณธ์ธ๋ ๋ชจ๋ฅด๋ ์ฌ์ด์ ์ปค๋จผ ๋ฆฌ์คํ์ ๊ทธ๋ฐ ๊ธฐ๋ฅ์ C ์ธ์ด๋ก ๊ตฌํํ๊ณ ์๊ฒ ๋๋ฉฐ, ๋น์ฐํ ๊ทธ๋ฐ ์ฆํฅ์ (?) ๊ตฌํ์ ์ค๋ ์๊ฐ์ ๊ฑธ์ณ ์ ๋์์ธ๋ ์ปค๋จผ ๋ฆฌ์คํ์ ๋นํด ์ง์ ์ผ๋ก ๋จ์ด์ง์๋ฐ์ ์๋ค๋ ์๋ฆฌ. ๋ญ๊ฐ ์ค๋งํ ๊ฒ ๊ฐ์๋ฐ, ๋ฆฌ์คํ ์ฑ
๋ช ๊ถ ๋ณด๋ฉด ์ ๋ง ๋ฆฌ์คํ ํ๋ก๊ทธ๋๋จธ๋ค์ ์ฝง๋๋ ํ๋์ ๋ซ๋ ๊ฒ์ ์ฝ๊ฒ ์ ์ ์๋ค
๋ฆฌ์คํ์ ํน์ง๊ณผ ์ด๊ธฐ์ ์ค๊ณ๋ชฉ์ (์๋ก์ด ์ธ์ด ๊ธฐ๋ฅ์ ์คํ) ๋๋ฌธ์ ๋ฆฌ์คํ๋ ์ฒ์์๋ ์ฐ์ ์ฐ์ฐ ๊ฐ์ ๊ฒ์ ๋น ๋ฅด๊ณ ๊ฐ๋ณ๊ฒ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ค.๋จผ์ ํ์ด๋ ํฌํธ๋์ ์ ์ด๋ถํฐ ์ด๋ฐ ์ชฝ์ผ๋ก ๋จผ์นํจ ์ด์๊ณ , ์ง๊ธ๋ ๊ทธ๋ ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋๋ ์ปดํจํฐ์ ์ฑ๋ฅ์ด ํ์ฐธ ๊ตฌ๋ฆฌ๊ธฐ๋ ํ๋ค. ์ด๋ ๋์ ํ์ดํ๊ณผ ํน์ ์์น์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋๋ฐ์ ํจ์จ์ ์ด์ง ๋ชปํ๋ ๋ฆฌ์คํธํ ์๋ฃ๊ตฌ์กฐ ์์ฃผ๋ก ์ฌ์ฉํ๋ ์ด๊ธฐ์ ๋ฌธ์ ์๋ค. ๊ทธ๋ฌ๋ ๊ณง ๋ง์ ๋ฅ๋ ฅ์๋ค์ ์ํด ๋ฆฌ์คํ ์ปดํ์ผ๋ฌ ๋ฐ ์ธํฐํ๋ฆฌํฐ๊ฐ ๊พธ์คํ ๊ฐ๋๋๊ณ , ์ธ์ด ์์ฒด๋ ๋ฆฌ์คํธ๊ฐ ์๋ ์ฌ๋ฌ๊ฐ์ง ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฌํ๊ณ ํ์
์ง์ ์ด ๊ฐ๋ฅํ๋๋ก ๊ฐ๋๋๋ฉด์, ์ ์ฐจํ ์ธ์ด์ ๋นํด ๊ทผ๋ณธ์ ์ธ ํ๊ณ๊ฐ ์์์๋ ์ด๋ฐ ๋ฌธ์ ๊ฐ ์ด๋ ์ ๋ ํด๊ฒฐ๋์๋ค.
์ด๋ฐ ์ธก๋ฉด ๋๋ถ์ ๋ฆฌ์คํ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ๊ณผ์ ์ ์ข ๋ ํนํ๋ฐ, ๋จผ์ ์คํฌ๋ฆฝํธ ์ธ์ด์ฒ๋ผ ๋์ ํ์ดํ๊ณผ ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํ ๋ฆฌ์คํธํ ์๋ฃ๊ตฌ์กฐ ์์ฃผ๋ก ๋น ๋ฅด๊ฒ ํ๋กํ ํ์ ์ ๋ฝ์๋ธ ๋ค์ ํ๋กํ ํ์ ์ด ๋ค ์์ฑ๋๋ฉด ํ์ ์ง์ ๊ณผ ํจ๊ป ์ฌ์ฉ๋ ์๋ฃ๊ตฌ์กฐ๋ค์ ๋ณด๋ค ํจ์จ์ ์ธ๊ฒ๋ค๋ก ๋ฐ๊ฟ์ฃผ๋์์ผ๋ก ์ต์ ํํ์ฌ ์์ฑํ๊ฒ ๋๋ค. ๊ทธ๋์ ์ต์ข ์ ์ผ๋ก ์์ฑ๋ ๋ฆฌ์คํ ํ๋ก๊ทธ๋จ์ ๋ฆฌ์คํธํ ์๋ฃ๊ตฌ์กฐ๊ฐ ์ ํ ์ฌ์ฉ๋์ง ์์ ๊ฒฝ์ฐ๋ ์๋ค. ํ๋กํ ํ์ ์ ์ฑ๋ฅ์ ๋ณดํต์ ์คํฌ๋ฆฝํ ์ธ์ด์ ๊ฐ๊น๊ณ , ์ต์ ํ๊ฐ ์๋ฃ๋ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ์ปดํ์ผ ์ธ์ด์ ๊ฐ๊น์์ง๋ค๊ณ ๋ณด๋ฉด ๋๋ค. ์ธํฐํ๋ฆฌํฐ์์ ํํธ๋ณ๋ก ์ฝ๊ฒ ํ ์คํธ ๊ฐ๋ฅํ ํจ์ํ ํจ๋ฌ๋ค์์ ์๋ฒฝ์ ๊ฐ๊น๊ฒ ์ง์ํ๋ฉฐ, ๋๋ถ๋ถ์ ๋ฆฌ์คํ ์ธํฐํ๋ฆฌํฐ๋ ํ๋ก๊ทธ๋จ ์คํ๋์ค์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ฆ์์์ ์ ์ฉํ๋๊ฒ ๊ฐ๋ฅํ๊ธฐ๋๋ฌธ์ ๊ฐ๋ฐ ์์ฒด๋ ์๊ฐ๋ณด๋ค ๋ง์ด ํธ๋ฆฌํํธ.
๋๋ถ๋ถ์ ์ค๋๋ ์ธ์ด๋ค์ด ๊ทธ๋ ๋ฏ, ์ ์ ์ธ๊ธฐ๊ฐ ์ฌ๊ทธ๋ผ๋๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ๋ฐ, ๋ฆฌ์คํ๋ ์คํ๋ ค 2000๋ ๋ ๋ค์ด ๊ณ ์ ์ ํฅ์๋ฅผ ๋๋ผ๋ ค๋(?) ์ ์ ํ๋ก๊ทธ๋๋จธ๋ค๊ณผ, ๊ธฐ์กด OOP์ ์ ์ฐจํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ๊ณ๋ฅผ ๋๋ ๊ฐ๋ฐ์๋ค์ ์ํด ์ธ๊ธฐ๋ฅผ ๋๊ณ ๋ถํํ์๋ค. ๊ทธ ์ธ๊ธฐ์ ์ค์ฌ์๋ ์ค์ฉ์ฑ์ ์ค์ฌ์ผ๋ก C++์ฒ๋ผ ์ธ์ด๋ฅผ ์์ฒญ๋๊ฒ ๊ฑฐ๋ํ๊ฒ ํค์ด ์ปค๋จผ ๋ฆฌ์คํ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ค์ ์ ๋ ์์ ์ธ์ด์ธ ์คํด(Scheme)์ด ์๋ค. ๋ณดํต ์ค์ ํ๋ก์ ํธ์์๋ ์ปค๋จผ ๋ฆฌ์คํ๊ฐ ์ฃผ๋ก ์ฌ์ฉ๋์๊ณ , ๋ํ์ด๋ ๊ธฐํ ๊ต์ก ๋ชฉ์ ์ผ๋ก๋ ์คํด์ด ๋ง์ด ์ฌ์ฉ๋์๋ค.
ํ์ง๋ง, ๊ทผ๋๋ค์ด ์ปค๋จผ ๋ฆฌ์คํ๋ ์ฌ์ ํ ๊ฐ๋ ฅํ๊ธด ํ์ง๋ง ์ข ๋ก์๋ค๋ ํ๊ฐ๋ฅผ ๋ฐ๊ณ ์ ๊ณ , ์ต๊ทผ์ ํจ์ํ ์ธ์ด ๋ถ(์ด๋ผ๊ธฐ๋ ์ข ํ๋ค์ง๋ง)์ ํ์
์ด ์คํด ์ชฝ์ ๊ด์ฌ์ด ์๋นํ ์ ๋ฆฐ ํธ์ธ๋ฐ, ์คํด์ ์ค์ฉ์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ์ ์์๋ ๋๋ฌด ์๊ธฐ ๋๋ฌธ์[4] ์์ฆ์ ์คํด์ ์ด๋ฆฌ์ ๋ฆฌ ํ์ฅ์ํค๊ณ ๋ชจ๋ํ ๊ธฐ๋ฅ๋ค์ ์ถ๊ฐํ ์คํด ๋ฐฉ์ธ์ด ๋ง์ด ๋์ค๊ณ ์๋ ํธ์ด๋ค. ์ด ์๋ก์ด ์คํด ๋ฐฉ์ธ์ ๋ํ์ ์ธ ์๋ก ์ ์์ค ๋งคํฌ๋ก๋ก ์ธ์ด์ ํ์ฅ์ฑ์ ํฌ๊ฒ ๋์ฌ ์ฌ๋ฌ๊ฐ์ง ๋ค๋ฅธ ์ธ์ด๋ก ์ฝ๊ฒ ๋ณ์ ์ด ๊ฐ๋ฅํ ๋ผ์ผ(Racket)์ด ์๋ค.
์ด์ ๋ณ๋๋ก 2007๋ ์ ๊ฐํญํํ์ฌ Java Virtual Machine ์์์ ๋์๊ฐ๋๋ก ๋ง๋ค์ด์ ธ ์๋ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ทธ๋๋ก ๋์ด๋ค ์ฐ๋ฉด์ ์๋ฐ๋ณด๋ค ๋์ ์์ฐ์ฑ์ ์๋ํ๋ ํด๋ก์ (Clojure)๊ฐ ์๋ค.
๋ฆฌ์คํ๋ ๋๋ฌด๋ ๋ง์ ์ฌํฌ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์, ๋ณดํต "๋ฆฌ์คํ ์ปค๋ฎค๋ํฐ"๋ผ๊ณ ๋ถ๋ฅผ ์ ์๋ ๊ฒ์ด ์กด์ฌํ์ง ์์ผ๋ฉฐ, ๋์ "์ปค๋จผ ๋ฆฌ์คํ ์ปค๋ฎค๋ํฐ", "์คํด ์ปค๋ฎค๋ํฐ", "๋ํท ์ปค๋ฎค๋ํฐ" ๋ฑ ๋ง์ด ์ฐ์ด๋ ์ฌํฌ๋ฆฌ์ ์ปค๋ฎค๋ํฐ๊ฐ ๋ฐ๋ก ์กด์ฌํ๋ค. ๋น์ฐํ๊ฒ๋, ์ธํฐ๋ท์์ ๊ฒ์ํด์ ์ฐพ์ ์ ์๋ ์๋ฃ ๋ํ ์ด ํญ๋ชฉ๊ณผ ๊ฐ์ด ๋ฆฌ์คํ ์ ๋ฐ์ ๋ํด ์ค๋ช ํ๋ ๊ฒ์ด ์๋๋ผ๋ฉด, ์ด๋ฐ ์์ผ๋ก ํน์ ๋ฐฉ์ธ์ ์ํ๋ ๋ฆฌ์คํ์ ๋ํ ๊ฒ์ด ๋๋ถ๋ถ์ด๋ค. ํ์ง๋ง ํ๊ตญ์์ ๋ฆฌ์คํ ๊ณ์ด ์ธ์ด๋ ๋งค์ฐ ๋ง์ด๋ํ ์ธ์ด์ ์ํ๋ฉฐ, ๋ฐ๋ผ์ "๋ฆฌ์คํ ์ปค๋ฎค๋ํฐ"๋ผ๋ ์ ๋ชฉ ์๋์ ๋ฆฌ์คํ์ ์ฌ๋ฌ ์ฌํฌ๋ฆฌ์ ๋ํด ๋ ผ์๋๋ ์ปค๋ฎค๋ํฐ๊ฐ ๊ทน์์ ์กด์ฌํ๋ค.
์๋ฌธ๊ถ ๋ฆฌ์คํ ํ๋ก๊ทธ๋๋จธ๋ค์ ์/์๋์ค ๊ตฌ๋ฌธ์ธ P๋ฅผ ์ผ์์ํ์ ์ด์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค๊ณ ํ๋ค. ์๋ฅผ ๋ค์ด:
๋ฆฌ์คํ์ ํน์ง๊ณผ ์ด๊ธฐ์ ์ค๊ณ๋ชฉ์ (์๋ก์ด ์ธ์ด ๊ธฐ๋ฅ์ ์คํ) ๋๋ฌธ์ ๋ฆฌ์คํ๋ ์ฒ์์๋ ์ฐ์ ์ฐ์ฐ ๊ฐ์ ๊ฒ์ ๋น ๋ฅด๊ณ ๊ฐ๋ณ๊ฒ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ค.
์ด๋ฐ ์ธก๋ฉด ๋๋ถ์ ๋ฆฌ์คํ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ๊ณผ์ ์ ์ข ๋ ํนํ๋ฐ, ๋จผ์ ์คํฌ๋ฆฝํธ ์ธ์ด์ฒ๋ผ ๋์ ํ์ดํ๊ณผ ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํ ๋ฆฌ์คํธํ ์๋ฃ๊ตฌ์กฐ ์์ฃผ๋ก ๋น ๋ฅด๊ฒ ํ๋กํ ํ์ ์ ๋ฝ์๋ธ ๋ค์ ํ๋กํ ํ์ ์ด ๋ค ์์ฑ๋๋ฉด ํ์ ์ง์ ๊ณผ ํจ๊ป ์ฌ์ฉ๋ ์๋ฃ๊ตฌ์กฐ๋ค์ ๋ณด๋ค ํจ์จ์ ์ธ๊ฒ๋ค๋ก ๋ฐ๊ฟ์ฃผ๋์์ผ๋ก ์ต์ ํํ์ฌ ์์ฑํ๊ฒ ๋๋ค. ๊ทธ๋์ ์ต์ข ์ ์ผ๋ก ์์ฑ๋ ๋ฆฌ์คํ ํ๋ก๊ทธ๋จ์ ๋ฆฌ์คํธํ ์๋ฃ๊ตฌ์กฐ๊ฐ ์ ํ ์ฌ์ฉ๋์ง ์์ ๊ฒฝ์ฐ๋ ์๋ค. ํ๋กํ ํ์ ์ ์ฑ๋ฅ์ ๋ณดํต์ ์คํฌ๋ฆฝํ ์ธ์ด์ ๊ฐ๊น๊ณ , ์ต์ ํ๊ฐ ์๋ฃ๋ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ์ปดํ์ผ ์ธ์ด์ ๊ฐ๊น์์ง๋ค๊ณ ๋ณด๋ฉด ๋๋ค. ์ธํฐํ๋ฆฌํฐ์์ ํํธ๋ณ๋ก ์ฝ๊ฒ ํ ์คํธ ๊ฐ๋ฅํ ํจ์ํ ํจ๋ฌ๋ค์์ ์๋ฒฝ์ ๊ฐ๊น๊ฒ ์ง์ํ๋ฉฐ, ๋๋ถ๋ถ์ ๋ฆฌ์คํ ์ธํฐํ๋ฆฌํฐ๋ ํ๋ก๊ทธ๋จ ์คํ๋์ค์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ฆ์์์ ์ ์ฉํ๋๊ฒ ๊ฐ๋ฅํ๊ธฐ๋๋ฌธ์ ๊ฐ๋ฐ ์์ฒด๋ ์๊ฐ๋ณด๋ค ๋ง์ด ํธ๋ฆฌํํธ.
๋๋ถ๋ถ์ ์ค๋๋ ์ธ์ด๋ค์ด ๊ทธ๋ ๋ฏ, ์ ์ ์ธ๊ธฐ๊ฐ ์ฌ๊ทธ๋ผ๋๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ๋ฐ, ๋ฆฌ์คํ๋ ์คํ๋ ค 2000๋ ๋ ๋ค์ด ๊ณ ์ ์ ํฅ์๋ฅผ ๋๋ผ๋ ค๋(?) ์ ์ ํ๋ก๊ทธ๋๋จธ๋ค๊ณผ, ๊ธฐ์กด OOP์ ์ ์ฐจํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ๊ณ๋ฅผ ๋๋ ๊ฐ๋ฐ์๋ค์ ์ํด ์ธ๊ธฐ๋ฅผ ๋๊ณ ๋ถํํ์๋ค. ๊ทธ ์ธ๊ธฐ์ ์ค์ฌ์๋ ์ค์ฉ์ฑ์ ์ค์ฌ์ผ๋ก C++์ฒ๋ผ ์ธ์ด๋ฅผ ์์ฒญ๋๊ฒ ๊ฑฐ๋ํ๊ฒ ํค์ด ์ปค๋จผ ๋ฆฌ์คํ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ค์ ์ ๋ ์์ ์ธ์ด์ธ ์คํด(Scheme)์ด ์๋ค. ๋ณดํต ์ค์ ํ๋ก์ ํธ์์๋ ์ปค๋จผ ๋ฆฌ์คํ๊ฐ ์ฃผ๋ก ์ฌ์ฉ๋์๊ณ , ๋ํ์ด๋ ๊ธฐํ ๊ต์ก ๋ชฉ์ ์ผ๋ก๋ ์คํด์ด ๋ง์ด ์ฌ์ฉ๋์๋ค.
ํ์ง๋ง, ๊ทผ๋๋ค์ด ์ปค๋จผ ๋ฆฌ์คํ๋ ์ฌ์ ํ ๊ฐ๋ ฅํ๊ธด ํ์ง๋ง ์ข ๋ก์๋ค๋ ํ๊ฐ๋ฅผ ๋ฐ๊ณ ์ ๊ณ , ์ต๊ทผ์ ํจ์ํ ์ธ์ด ๋ถ
์ด์ ๋ณ๋๋ก 2007๋ ์ ๊ฐํญํํ์ฌ Java Virtual Machine ์์์ ๋์๊ฐ๋๋ก ๋ง๋ค์ด์ ธ ์๋ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ทธ๋๋ก ๋์ด๋ค ์ฐ๋ฉด์ ์๋ฐ๋ณด๋ค ๋์ ์์ฐ์ฑ์ ์๋ํ๋ ํด๋ก์ (Clojure)๊ฐ ์๋ค.
๋ฆฌ์คํ๋ ๋๋ฌด๋ ๋ง์ ์ฌํฌ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์, ๋ณดํต "๋ฆฌ์คํ ์ปค๋ฎค๋ํฐ"๋ผ๊ณ ๋ถ๋ฅผ ์ ์๋ ๊ฒ์ด ์กด์ฌํ์ง ์์ผ๋ฉฐ, ๋์ "์ปค๋จผ ๋ฆฌ์คํ ์ปค๋ฎค๋ํฐ", "์คํด ์ปค๋ฎค๋ํฐ", "๋ํท ์ปค๋ฎค๋ํฐ" ๋ฑ ๋ง์ด ์ฐ์ด๋ ์ฌํฌ๋ฆฌ์ ์ปค๋ฎค๋ํฐ๊ฐ ๋ฐ๋ก ์กด์ฌํ๋ค. ๋น์ฐํ๊ฒ๋, ์ธํฐ๋ท์์ ๊ฒ์ํด์ ์ฐพ์ ์ ์๋ ์๋ฃ ๋ํ ์ด ํญ๋ชฉ๊ณผ ๊ฐ์ด ๋ฆฌ์คํ ์ ๋ฐ์ ๋ํด ์ค๋ช ํ๋ ๊ฒ์ด ์๋๋ผ๋ฉด, ์ด๋ฐ ์์ผ๋ก ํน์ ๋ฐฉ์ธ์ ์ํ๋ ๋ฆฌ์คํ์ ๋ํ ๊ฒ์ด ๋๋ถ๋ถ์ด๋ค. ํ์ง๋ง ํ๊ตญ์์ ๋ฆฌ์คํ ๊ณ์ด ์ธ์ด๋ ๋งค์ฐ ๋ง์ด๋ํ ์ธ์ด์ ์ํ๋ฉฐ, ๋ฐ๋ผ์ "๋ฆฌ์คํ ์ปค๋ฎค๋ํฐ"๋ผ๋ ์ ๋ชฉ ์๋์ ๋ฆฌ์คํ์ ์ฌ๋ฌ ์ฌํฌ๋ฆฌ์ ๋ํด ๋ ผ์๋๋ ์ปค๋ฎค๋ํฐ๊ฐ ๊ทน์์ ์กด์ฌํ๋ค.
์๋ฌธ๊ถ ๋ฆฌ์คํ ํ๋ก๊ทธ๋๋จธ๋ค์ ์/์๋์ค ๊ตฌ๋ฌธ์ธ P๋ฅผ ์ผ์์ํ์ ์ด์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค๊ณ ํ๋ค. ์๋ฅผ ๋ค์ด:
Q: "Foodp" (๋ฐฅ๋จน์๋?)
A: "T" (True = ์.)
A: "NIL" (False = ์๋.)
7. ๋ฆฌ์คํ ์ฌํฌ๋ฆฌ[ํธ์ง]
7.1. 2๋ ๋ฆฌ์คํ ์ฌํฌ๋ฆฌ[ํธ์ง]
ํ์ฌ ๊ฐ์ฅ ์ ๋ช
ํ๋ฉด์ ๋ง์ด ์ฐ์ด๋ ๋ฆฌ์คํ ์ฌํฌ๋ฆฌ๋ ๋ค์ 2๊ฐ์ง๊ฐ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ต๊ทผ ์ฌ์ฉ๋๊ณผ ์ธ๊ธฐ๋๋ ๊ฐํญํํ Clojureํํ
๋ฐ๋ฆฌ๋ ๊ฒ ๊ฐ๊ธฐ๋ ํ๋ค
7.1.1. Common Lisp[ํธ์ง]
๋ํ์ ์ธ Lisp-2. ๊ธฐ์กด์ ๋๋ฆฝํ๋ ์ฌ๋ฌ ๋ฆฌ์คํ ๊ตฌํ์ฒด์ ์คํ์ ํ์คํํ๋ฉด์ ๋์์ ๋ค์ํ ๊ฐ๋
์ ์ํํ ์ ์๋๋ก ๋ฉํฐ ํจ๋ฌ๋ค์ ์ธ์ด๋ก ์ค๊ณ๋์ด 1984๋
์ ํ์ค์์ด ๋ฐํ๋์๋ค. ๊ทธ๋ฆฌ๊ณ 1994๋
์ ๊ฐ์ ๋ ๊ฒ์ด ANSI ํ์ค์ผ๋ก ์ฑํ๋๋ค.
Common Lisp๋ ๋ค๋ชฉ์ , ๋ฉํฐ ํจ๋ฌ๋ค์ ์ธ์ด๋ก ์ ์ฐจํ, ํจ์ํ, OOP๋ฅผ ๋ชจ๋ ์ง์ํ๋ ๋ค์ด๋ด๋ฏน ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ์ค์์ด๋ค. ์ฆ ์ด ์์ฒด๋ก๋ ๊ทธ๋ฅ ์ธ์ด ์ฌ์์ผ ๋ฟ์ด๋ค.
๋ฐ๋ผ์ ์ด ํ์ค ์ฌ์์ ๊ทผ๊ฑฐํ์ฌ ๋ค์ํ ๊ตฌํ์ด ๋ฑ์ฅํ๋๋ฐ, ๋น์ฐํ ๊ตฌํ์ฒด๋ณ๋ก ๊ธฐ๋ฅ์ ์กฐ๊ธ์ฉ ํ์ฅํ์ฌ ๋ค๋ฅธ ๋ถ๋ถ์ด ์กด์ฌํ๋ฉฐ, ์ด๋ฌํ ํน์ฑ์ ๊ณ ๋ คํ์ฌ ์ด๋ ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ ์ง ๊ฒฐ์ ํด์ผ ํ๋ค.
Common Lisp๋ ๋ค๋ชฉ์ , ๋ฉํฐ ํจ๋ฌ๋ค์ ์ธ์ด๋ก ์ ์ฐจํ, ํจ์ํ, OOP๋ฅผ ๋ชจ๋ ์ง์ํ๋ ๋ค์ด๋ด๋ฏน ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ์ค์์ด๋ค. ์ฆ ์ด ์์ฒด๋ก๋ ๊ทธ๋ฅ ์ธ์ด ์ฌ์์ผ ๋ฟ์ด๋ค.
๋ฐ๋ผ์ ์ด ํ์ค ์ฌ์์ ๊ทผ๊ฑฐํ์ฌ ๋ค์ํ ๊ตฌํ์ด ๋ฑ์ฅํ๋๋ฐ, ๋น์ฐํ ๊ตฌํ์ฒด๋ณ๋ก ๊ธฐ๋ฅ์ ์กฐ๊ธ์ฉ ํ์ฅํ์ฌ ๋ค๋ฅธ ๋ถ๋ถ์ด ์กด์ฌํ๋ฉฐ, ์ด๋ฌํ ํน์ฑ์ ๊ณ ๋ คํ์ฌ ์ด๋ ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ ์ง ๊ฒฐ์ ํด์ผ ํ๋ค.
7.1.1.1. ์ฃผ์ ๊ตฌํ์ฒด[ํธ์ง]
๊ดํธ ์์ ์๋ฌธ์ ์ฝ์นญ์ Common Lisp ์ปค๋ฎค๋ํฐ์์ ํด๋น ๊ตฌํ์ฒด๋ฅผ ์ธ๊ธํ ๋ ์ฌ์ฉํ๋ ์ฝ์นญ์ด๋ค.
๊ธฐ๊ณ์ด ๋ฐ์ด๋๋ฆฌ ๊ตฌํ์ฒด๋ ๋๋ถ๋ถ Foreign Function Interface(FFI)๋ฅผ ์ง์ํ์ฌ ์ด๋ฏธ ์กด์ฌํ๋ *.so, *.dll, *.dylib ์ ์ฌ์ฉํ ์ ์๋ค. Java Virtual Machine์์ ๋์ํ๋ ๊ตฌํ์ฒด๋ JNI์ ๋๋ถ์ด Java Native Acces๊ฐ ๋ฑ์ฅํ์ฌ ์ด์ ๋ณด๋ค ํธ๋ฆฌํ๊ฒ ํ๋ซํผ์์ ์ ๊ณตํ๋ ๊ธฐ๊ณ์ด ์์์ ์ฌ์ฉํ ์ ์๋ค.
๋ฌผ๋ก ์ฌ๊ธฐ์ ์๊ฐ๋์ง ์์ ๊ตฌํ์ฒด๋ ์ผ๋ง๋ ์ง ์กด์ฌํ๋ค.
๊ธฐ๊ณ์ด ๋ฐ์ด๋๋ฆฌ ๊ตฌํ์ฒด๋ ๋๋ถ๋ถ Foreign Function Interface(FFI)๋ฅผ ์ง์ํ์ฌ ์ด๋ฏธ ์กด์ฌํ๋ *.so, *.dll, *.dylib ์ ์ฌ์ฉํ ์ ์๋ค. Java Virtual Machine์์ ๋์ํ๋ ๊ตฌํ์ฒด๋ JNI์ ๋๋ถ์ด Java Native Acces๊ฐ ๋ฑ์ฅํ์ฌ ์ด์ ๋ณด๋ค ํธ๋ฆฌํ๊ฒ ํ๋ซํผ์์ ์ ๊ณตํ๋ ๊ธฐ๊ณ์ด ์์์ ์ฌ์ฉํ ์ ์๋ค.
๋ฌผ๋ก ์ฌ๊ธฐ์ ์๊ฐ๋์ง ์์ ๊ตฌํ์ฒด๋ ์ผ๋ง๋ ์ง ์กด์ฌํ๋ค.
7.1.1.1.1. ์์ ์ฉ ๋ผ์ด์ ์ค[ํธ์ง]
- Allegro Common Lisp(allegro)
- LispWorks(lispworks)
7.1.1.1.2. ๋ฌด๋ฃ ๋ผ์ด์ ์ค[ํธ์ง]
- Armed Bear Common Lisp(abcl): JVM ์์์ ๋์ํ๋ Common Lisp.
- Clozure CL(ccl): Macintosh Common Lisp์ Fork์์ ์์ํ ๊ตฌํ์ฒด. ํ์ฌ๋ ๋ค๋ฅธ Unix ๊ณ์ด ์ด์์ฒด์ ๋ Windows ๋ ์ง์ํ๋ค.
Clojure์๋ ๋ค๋ฅด๋ค! Clojure์๋!! - GNU Common Lisp(clisp): ๋ฐ์ดํธ ์ฝ๋(์๋ฐ์ ๊ทธ๊ฒ๊ณผ๋ ๋ค๋ฅด๋ค. CPython๋ ์ผ๋จ ์ปดํ์ผ ์์ฒด๋ ๋ฐ์ดํธ ์ฝ๋๋ก ๋๋ค) ํํ๋ก ์ปดํ์ผํ์ฌ ์คํ๋๋ ๊ตฌํ์ฒด. ์์ง๊น์ง Thread ์ง์์ด ์ ํ์ ์ด๋ค. ๋ค๋ฅด๊ฒ ์์๋ GNU CL(gcl)์ด๋ผ๋ ๊ตฌํ์ฒด๊ฐ ์์ผ๋ฉฐ, ์ด๊ฒ๊ณผ ํท๊ฐ๋ฆฌ๋ฉด ์๋๋ค.
- CMUCL(cmucl): ์นด๋ค๊ธฐ ๋ฉ๋ก ๋ํ์์ ์์๋ ๊ตฌํ์ฒด. ์๋์ฐ๋ ์ง์ํ์ง ์๋๋ค. Thread๋ ์ง์๋์ง ์๋๋ค.
- Embeddable Common Lisp(ecl): C์ธ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์๋ ํ๋ก๊ทธ๋จ์ ์๋ฒ ๋ฉํ์ฌ ์ฌ์ฉ๋ ๋ชฉ์ ์ผ๋ก ํ์ํ๋ค. ์ฆ ์ด๊ฒ์ C ํ๋ก๊ทธ๋จ ๋ด๋ถ์์ ๋ถ๋ฌ์ ์ฌ์ฉํ๋ฉด ๋ฆฌ์คํ ํ๋ก๊ทธ๋จ์ ์คํ์ํฌ ์๋, ์กฐ๊ธ ๋ค๋ฅด๊ฒ ์ฌ์ฉํ๋ฉด ํด๋น C ํ๋ก๊ทธ๋จ์ด ์คํฌ๋ฆฝํธ๋ก ๋ฆฌ์คํ๋ฅผ ์ฌ์ฉํ๊ฒ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
- ManKai Common Lisp(mkcl): ecl์ ๋ธ๋์น๋ก, ecl์ ์ฌ๋ฌ ๋ถ๋ถ์ ์ฌ์์ฑํ์ฌ ecl๋ณด๋ค ์์ ์ฑ์ ๋์ธ ๊ตฌํ์ฒด.
- Steel Bank Common Lisp(sbcl): cmucl์ ๋ธ๋์น๋ก ๊ด๋ฆฌ, ์ด์ ํน์ฑ์ ํฅ์์ํจ ๊ตฌํ์ฒด. ๋น์ฐํ cmucl์ด ๋์ํ๋ ๋ชจ๋ ํ๊ฒฝ์์ ๋์ํ๋ฉฐ, ์คํ์ ์ผ๋ก ์๋์ฐ ํ๊ฒฝ๋ ์ง์ํ๋ฉฐ ๋น ๋ฅธ ์คํ ์๋๋ก ์ ๋ช ํ๋ค. ๋ฆฌ๋ ์ค์์๋ง Thread๋ฅผ ์์ ํ๊ฒ ์ง์ํ๋ฉฐ ๋ค๋ฅธ ํ๋ซํผ์์๋ ์์ง ์คํ๋จ๊ณ์ด๋ค.
- XCL(xcl): abcl์ ์ ์์๊ฐ ๋ง๋๋ ๋ ๋ค๋ฅธ ๊ตฌํ์ฒด. abcl๊ณผ๋ ๋ฌ๋ฆฌ ํ๊ฒ ํ๋ซํผ์ ๊ธฐ๊ณ์ด๋ก ๋์ํ๋ค.
7.1.1.2. Quicklisp์ asdf[ํธ์ง]
7.1.2. Scheme[ํธ์ง]
๋ํ์ ์ธ Lisp-1 ์ด๋ค.
7.2. ์ ๋ช ํ ๋ฆฌ์คํ ์ฌํฌ๋ฆฌ[ํธ์ง]
- AutoLISP, VisualLisp - AutoCAD์ ๋ด์ฅ๋์ด ์ผ๋ถ ๋ณํ๋ ๋ฆฌ์คํ. ์ค์ฉ์ ์ผ๋ก ๋ฆฌ์คํ๊ฐ ์ฌ์ฉ๋๋ ๋ํ์ ์ธ ์.
- Clojure - JVM ์์์ ์ด์ฉ๋๋ฉฐ, Lisp ๊ณ์ด ์ธ์ด์ ๊ฐ๊ฒฐํจ๊ณผ ๊ฐ๋ ฅํจ, JVM์ ์ด์์ฑ์ ๊ฐ์ง๋ฉฐ ์ธ์ด์์ ์ง์ํ๋ Software Transactional Memory(STM)๊ณผ ์ ์ถ์ํ๋ ๊ด๋ จ ํจ์๋ฅผ ํตํ ๋น๊ต์ ์ฌ์ด ๋ณํ์ฑ ๊ตฌํ,[5] ์ ์ฉ Build Tool์ธ Leiningen[6]๊ณผ Maven Repository๊ฐ ๊ฒฐํฉํ์ฌ ํธ๋ฆฌํ Build, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ๊ณผ ๊ด๋ฆฌ, Jenkins, Travis ๋ฑ์ CI์ ์ฐ๋์ด ์ฝ๊ณ , Java๋ฅผ ์ง์ํ๋ ํด๋ผ์ฐ๋ ์๋น์ค์ ์ฝ๊ฒ ์ฌ๋ฆด ์ ์๋ ๋ฑ์ ์ฅ์ ์ผ๋ก ์ต๊ทผ ์ฃผ๋ชฉ๋ฐ๊ณ ์๋ค. 20์ธ๊ธฐ ์คํ์ผ์ ์ ์งํ๋ฉด์ ์ต์ฒจ๋จ ๋ณด์กฐ๋๊ตฌ๋ฅผ ๋ฌ๊ณ ๋์จ 21์ธ๊ธฐํ Lisp ๋ฐฉ์ธ์ผ์ง๋. ๋งค์ฐ ๋ณด์์ ์ธ ๊ธ์ต๊ณ์์ ์ ๋ณ๋๊ฒ ์ ๊ธฐ์ ๋์ ์ ์ ๊ทน์ ์ธ ์จํฐ์ํ ๋ณธ์ฌ์์ Clojure๋ฅผ ๋์ ํด ์ฌ์ฉํ๊ณ ์๋ค๊ณ ๋ฐํ๋ค.
- Emacs Lisp (elisp) - ์ด๋งฅ์ค์ ๊ธฐ๋ฐ. Lisp-2์ด๋ฉฐ, Lisp ๊ณ์ด ์ธ์ด๋ฅผ ์ฝ๋ฉํ๋๋ฐ Emacs ๋ณด๋ค ์ข์ ํด์ 21์ธ๊ธฐ์๋ ๊ทธ๋ค์ง ๋ง์ง ์๋ค. ์์ด๋ฌ๋ํ์ง๋ง, Lisp ๋ฐฉ์ธ์ด ์๋ฌด๋ฆฌ ๋ง๋๋ผ๋ ๊ฒฐ๊ตญ ๊ทธ๋ค์ค ๋๋ค์๊ฐ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ์๋ํฐ๋ ๊ฒฐ๊ตญ ์ด๋งฅ์ค์ด๊ณ , ์ด๋งฅ์ค ํน์ง์ elisp์ ๋ชจ๋ฅด๊ณ ์ฌ์ฉํ๊ธฐ๋ ์ข ๊ฑฐ์๊ธฐํ๋ค๋ณด๋ Lisp ๋ฐฉ์ธ ์ค ๊ฐ์ฅ ๋ง์ ์ฌ์ฉ์๋ฅผ ํ๋ณดํ๊ณ ์๋ ์ธ์ด์ด๊ธฐ๋ ํ๋ค.
- EuLisp - ์ ๋ฝ ๋ฒ์ ์ Lisp. Lisp ํ์ค์ ๊ถ์์ ์ค ํ๋ช ์ธ Kent Pitman์ ํ๊ณ ์ ์ํ๋ฉด, Common Lisp์ด ๋ง๋ค์ด์ง ๋น์, uucp(unix-2-unix copy) ๋ก ์๋ก ์ํต์ ํ์๋๋ฐ, ์๋ฌด๋๋ ๊ตญ์ ๋คํธ์ํฌ๊ฐ ํ์ฑํ๋์ง ์์์ ๋๋ฅ๊ฐ ๋ฉ์์ง๊ฐ ์ค๊ฐ๋๋ฐ ๋ฉฐ์น ์ด์์ฉ ์์๋์๊ณ , ๋๋ถ์ ์์์(ํนํ ์ผ๋ณธ)์ ์ ๋ฝ์ ๋ ผ์์์ ๊ฑฐ์ ๋ฐฐ์ ๋์๋ค๊ณ ํ๋ค. ์ด ๋๋ฌธ์ ๊ธฐ๋ถ๋๋ป์ ์ ๋ฝ ์์ฒด์ ์ผ๋ก ๋ง๋ค์ด ๋ฑ์ฅํ Lisp์ด๋ผ๊ณ ๋ ํ๋๋ฐ, Lisp-1์ด๋ฉฐ Common Lisp์ ๊ณผ๊ฑฐ(ํ์ํธํ)์ ๋ฐ๋ชฉ์ ์กํ๊ณ , Scheme์ ๋๋ฌด ์์ผ๋ ๊ทธ ์ค๊ฐ ์ ๋๋ฅผ ๋ ธ๋ฆฌ๊ณ ๋ง๋ค์ด์ก๋ค๊ณ ํ๋ค.
- ISLISP - ISO ํ์ค์ LISP์ด๋ค. ๋ค๋ง, ISO์์ LISP ํ์ค์ ์ ์ํ๋ ค ํ ๊ฒ์ ์๋๊ณ ๊ทธ๋ฅ ISLISP์ ํ์ค์ด ISO์์ ๋ง๋ค์ด์ก๋ค๊ณ ๋ด์ผ ํ๋ค. LISP์ ์ฐฝ์์์ธ ์กด ๋งค์นด์ ๊ต์๊ฐ LISP์ ํ๋์ ํ์ค์ผ๋ก ๊ฐ๋๋ ๊ฒ์ ์ข์ํ์ง ์์๊ธฐ๋๋ฌธ์ LISP์ ISO ํ์ค์ด ์๋, ISLISP ๋ฐฉ์ธ์ ISO ํ์ค์ผ๋ก ํด๋ฌ๋ผ๊ณ ์ง์ ์ ์ผ๋ก ์์ฒญํ๋ค๊ณ ํ๋ค.[7] Lisp-2์ด๋ฉฐ, ์ฌ๋ฌ ๋ฐฉ์ธ์ธ Common Lisp, Scheme, EuLisp, Le Lisp์ ๊ณตํต์ ์ผ๋ก ๋ค์ด๊ฐ ๊ต์งํฉ ์์ฃผ๋ก ๋ฌถ์ด์ ์ธ์ด๋ฅผ ๋ง๋ค๊ณ ํ์คํ๋ฅผ ์ํจ๋ค๊ณ ํ๋ค.
- Javelin - ์คํฌ๋ฆฝํ ์ ์ ํฉํ JVM ๊ธฐ๋ฐ Lisp. ๊ณต์ ์ฌ์ดํธ
- Le Lisp - ํ๋์ค์ ์ ๋ช ํ ์ ์ฐํ ์ฐ๊ตฌ์์ธ INRIA์์ ๋ง๋ค์ด์ง Lisp ๋ฐฉ์ธ.
- Racket - ๊ต์ก์ฉ์ผ๋ก ๋ง์ด ์ฐ์ด๋ ์คํด ๋ฐฉ์ธ์ผ๋ก, ๋ฆฌ์คํ๋ฅผ ๋ฐฐ์ฐ๊ธฐ ๊ฐ์ฅ ํธํ ํ๊ฒฝ์ ์ ๊ณตํ๋ค. ์ค์ ๋ก ์๋์ฐ, ๋งฅ, ์ ๋์ค ๊ณ์ด์ ๋ค ํธํ๋๋ IDE๋ฅผ ์ ๊ณตํ๋ฉฐ, ๊ฑฐ๊ธฐ์ GUI, ๋คํธ์ํฌ ๋ฑ ์ฌ๋งํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค ํฌํจ๋์ด์๊ณ ,
(Batteries Included!)์ค์ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ ๋น์ทํ๋ฉด์, ๋ ธ๊ฐ๋ค๊ฐ ๋ ์ ์๋ ๋ถ์ฐจ์ ์ธ ๊ธฐ๋ฅ๋ค์ ๋จ์ํ์ํจ ํ๋ก๊ทธ๋๋ฐ ๊ต์ก์ฉ ๋ชจ๋๊น์ง ๋ฐ๋ก ํฌํจ๋์ด ์๋ค. Realm of Racket์ด๋ผ๋ ๊ต์ฌ๋ฅผ ๋ณด๋ฉด, ์ค๊ณ ๊ต์ ๋์์ ๊ธฐ์ด์ ์ธ ์์ค์ด๊ธด ํ์ง๋ง ์คํด ๋ฌธ๋ฒ๊ณผ GUI, ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ, ์ธ๊ณต์ง๋ฅ ๋ฑ์ ๊ฒ์ ํ๋ก๊ทธ๋๋ฐ ์ค์ต์ ํตํด ๊ฒจ์ฐ 300ํ์ด์ง ์ดํ์ ๋ถ๋์ผ๋ก ์ค๋ช ํ๊ณ ์๋ค! ์ฌ์ค, ๋ฆฌ์คํ๋ผ๋ ์ธ์ด ์์ฒด๊ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๋ง๋ค๊ธฐ ํธ๋ฆฌํ ์ธ์ด์ด๊ธฐ๋ ํ๊ณ , Racket์ ์คํด์ ์ ๋ฐ ์ธ์ด ์์ฒด์ ํ์ฅ์ฑ์ ๋ค์ ๊ทน๋จ์ ์ธ ๋ ๋ฒจ๋ก ๋์ด์ฌ๋ฆฐ ์ธ์ด์ด๊ธฐ์ ๊ฐ๋ฅํ ๊ฒ.
8. Lisp ์ฌํฌ๋ฆฌ ๋น๊ต[ํธ์ง]
- Common Lisp, Racket, Clojure, elisp ๋น๊ต: http://hyperpolyglot.org/lisp
9. ์ธ์ด์ฅ์ ์ ํ ์ข ๋ฅ[ํธ์ง]
์ผ๋ช
ํ์งง์ ์๋ฆฌ. ใ
๊ณผ ๊ฐ์ ๋จ์ค์ ๋ฐ์์ ๋ชปํ๋ ์ธ์ด ์ฅ์ ์ด๋ค. ์ง๋ณ ์ฝ๋๋ F80.8
[1] C ์ธ์ด๊ฐ ์ ๋์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด ํ์ํ ์ธ์ด๋ผ๋ฉด, LISP ์ LISP์ ๋ง๋ค๊ธฐ ์ํด ํ์ํ ์ธ์ด๋ผ๋ ๋๋ด๋ ์๋ค.
[2] ์ด์ฐจํผ ๋ชจ๋ ๋ฒ์ฉ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ํ๋ง ์์ ํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ฅ๋ฉด์์๋ ๋์ผํ๋ค. ์๋ก์ด ํจ๋ฌ๋ค์์ ์ธ์ด๊ฐ ๋ฑ์ฅํ๋ค๊ณ ํด์ ์ ์ ์๋ ์์ ํ ์๋ก์ด ๊ฒ์ด ๊ฐ๋ฅํ๊ฒ ๋๋ ๊ฒ์ด ์๋๊ณ , ๊ทธ์ ํํํ๋ ๋ฐฉ์์ด ๋ฐ๋๋ ๊ฒ ๋ฟ์ด๋ฉฐ ๋ฆฌ์คํ๋ ์ธ์ด ์์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ์ด๋ฌํ ํน์ง์ ์ด์ฉํ์ฌ ์๋ก์ด ํํ ๋ฐฉ์, ๋ฌธ๋ฒ ๋ฑ์ embedding ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. ๋ฌผ๋ก ์ด๋ด ๊ฒฝ์ฐ, ํญ์ ์คํ ํจ์จ๊ณผ ์ฑ๋ฅ์ด ์ข๋ค๊ณ ๋ณด์ฅํ ์ ์๋ค. ๊ตฌํ ๊ฐ๋ฅํ๋ค๋๋ฐ ์์๊ฐ ์๋ค. ์ฆ ๋งคํฌ๋ก๋ฅผ ์ฐ๋ ค๋ฉด ์ ๋ง๋ค์ด์ผ ํ๋ค.
[3] Greenspun์ 10๋ฒ์งธ ๋ฒ์น. Greenspun์ ๋ง์ ์ํ๋ฉด, 1-9๋ฒ์งธ ๋ฒ์น์ด ์์ง๋ ์๊ณ ๊ทธ๋ฅ 10๋ฒ์งธ ๋ฒ์น์ด๋ผ ํ๋ฉด ๊ธฐ์ต์ ์ ๋จ์ ๊ฒ์ด๋ผ ์๊ฐํ๋ค๊ณ ํ๋ค. [์ถ์ฒ]
[4] ๊ทธ๋์, ๊ธฐ์กด์๋ ์คํด ์ปดํ์ผ๋ฌ๋ค์ ํ์ค์ ์ธ ๋ถ๋ถ ์ด์ธ์ ๋ค๋ค ๋๋ฆ์ ๊ฝค ์ปค๋ค๋ ํ์ฅ์ ๊ฐ์ด ํ์ฌํด์ ๋ฐฐํฌํ์๋ค. ์ด๋ฐ ๊ฒฝํฅ์ด ๋ฐ์๋ ํ์ธ์ง, ์ต๊ทผ์ ํ์ค์ธ R6RS๋ถํฐ๋ ๋์ด์ ์๋ค๊ณ ๋ณด๊ธด ํ๋ค์ด์ก๋๋ฐ, ์คํด ์์ํ์ชฝ์์ ์ด๋ฐ ๊ฒฝํฅ์ ๋ฐ๋ฐ์ธ๋ ฅ๋ ๊ฝค ์๋ ํ์ธ์ง, ์ด์ ๋ ์์ small scheme, large scheme ๋ ๊ฐ์ง ํ์ค์ ์ด์ํ๋์์ผ๋ก ๋ฐ๋์ด ๋ฒ๋ ธ๋ค.
[5] ํ๋ก๊ทธ๋๋ฐ์์ ๊ธฐ์ ์ ์ธ ๋์ด๋๋ก ๊ฐ์ฅ ์ด๋ ค์ด ๊ฒ์ผ๋ก ๊ผฝ๋ ๊ฒ ์ค ํ๋๊ฐ ๋ฐ๋ก ์ด๊ฒ์ด๋ค. ์ฌ๋ฌ ํ๋ก์ธ์ค๋ ์ฐ๋ ๋๊ฐ ๋์์ ํ ๊ณณ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ๋, ํต์ ๋ฅผ ์ํ๋ฉด ๋น์ฐํ ๊ฐ์ด ์๋ง์ด ๋๋๋ฐ, ํต์ ํ๋ ๊ฒ ์ด๋ ค์ธ ๋ฟ๋๋ฌ ์ฑ๊ณตํด๋ ์ ๋๋ก ๋ชป ํ๋ฉด ์ฑ๋ฅ์ด ๊ทน์
์ผ๋ก ๋จ์ด์ง๋ค. ์ด๋ฅผ ํจ์จ์ ์ผ๋ก ์ ํ๋ ๊ฒ์ด ๊ด๊ฑด์ด๋ค.
[6] ์ด๋ฆ์ 'Leiningen Versus the Ants'๋ผ๋ ๋จํธ์์ค์์ ๋ฐ์จ ๋ฏํ๋ค. ์ฐธ๊ณ ๋ก ์๋ฐ์ ๋ํ์ ์ธ ๋น๋ ํด์ด Ant์ด๋ค.
[7] ์ฐธ๊ณ ๋ก, ๋งค์นด์ ๊ต์๋ ANSI Common Lisp์ ์คํ์ด ๋ง๋ค์ด์ง ๋๋ ๋น์ทํ ์์ฒญ์ ํ๋ค๊ณ ํ๋ค.