๋ถ๋ฅ:ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
." Hello, world!"
1. ๊ฐ์[ํธ์ง]
ํฌ์ค ํ์ค ํํ์ด์ง
์ฐฐ์ค ๋ฌด์ด(Charles H. Moore)์ ์ํด ๊ฐ๋ฐ๋ ๋ช ๋ นํ, ์ ์ฐจ์ ์คํ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค. ๋ฐ์(Reflective), ์ฐ๊ฒฐ(Concatenative) ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์๋ ์ํ๋ค. ์ฃผ๋ก ์๋ฒ ๋๋ ์ฅ์น๋ฅผ ์ํด์ ์ฐ์ฌ์ง์ง๋ง PC๋ฅผ ํ๊ฒ์ผ๋ก ํ ํ๋ก๊ทธ๋จ๋ ์์ฑ๋๋ค.
ํฌ์ค๋ ์คํ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ ฅ๋ ๋ฐ์ดํฐ๊ฐ ์คํ์ ์์ด๋ฉฐ ์ด๋ฅผ ์ฒ๋ฆฌํ๋ค. ๋๋ฌธ์ ์ฝ๋ ์์ผ๋ก ๋ณด๋ฉด LISP์๋ ์ ๋ฐ๋์ธ ์ญํด๋๋ ํ๊ธฐ๋ฒ์ผ๋ก ์์์ ์์ฑํ๊ฒ ๋๋ค.
์ฐฐ์ค ๋ฌด์ด(Charles H. Moore)์ ์ํด ๊ฐ๋ฐ๋ ๋ช ๋ นํ, ์ ์ฐจ์ ์คํ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค. ๋ฐ์(Reflective), ์ฐ๊ฒฐ(Concatenative) ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์๋ ์ํ๋ค. ์ฃผ๋ก ์๋ฒ ๋๋ ์ฅ์น๋ฅผ ์ํด์ ์ฐ์ฌ์ง์ง๋ง PC๋ฅผ ํ๊ฒ์ผ๋ก ํ ํ๋ก๊ทธ๋จ๋ ์์ฑ๋๋ค.
ํฌ์ค๋ ์คํ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ ฅ๋ ๋ฐ์ดํฐ๊ฐ ์คํ์ ์์ด๋ฉฐ ์ด๋ฅผ ์ฒ๋ฆฌํ๋ค. ๋๋ฌธ์ ์ฝ๋ ์์ผ๋ก ๋ณด๋ฉด LISP์๋ ์ ๋ฐ๋์ธ ์ญํด๋๋ ํ๊ธฐ๋ฒ์ผ๋ก ์์์ ์์ฑํ๊ฒ ๋๋ค.
1.1. ๋ช ์นญ[ํธ์ง]
Forth๋ผ๋ ์ด๋ฆ์ 4์ธ๋(์ฐจ์ธ๋) ํ๋ก๊ทธ๋๋ฐ์ ๋ปํ๋ FOURTH๋ก ์ง์ด์ก์ผ๋, ๋น์ ์ฌ์ฉํ๋ ์์คํ
์ด ํ์ผ ์ด๋ฆ์ 5์๋ก ์ ํํ๊ธฐ ๋๋ฌธ์, FORTH๋ก ์ฐ๊ฒ ๋๋ค. ์๋ ์๋ ํฌ์ค์ ์ด๋ฆ์ ์ ๋ถ ๋๋ฌธ์๋ก ์ ์๊ธฐ ๋๋ฌธ์ ํ์ฌ๋ FORTH๋ก ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
2. ์ญ์ฌ[ํธ์ง]
ํฌ์ค๋ 1970๋
๋ ์ด์ ๋ถํฐ ์ฐฐ์ค ๋ฌด์ด์ ์ํด ๊ฐ๋ฐ๋๊ธฐ ์์ํ์๋ค.
๋๋ฆฌ ๋ณด๊ธ๋ ์ดํ, 1979๋ ๊ณผ 1983๋ ์ FORTH-79. FORTH-83์ผ๋ก ์ ๋ฆฌ๋์๊ณ , ์ด๋ 1994๋ ANSI์ ์ํด ํ์คํ๋์๋ค.
ํฌ์ค๋ ๊ฐ๋ณ๊ณ ๋จ์ํ๊ธฐ ๋๋ฌธ์ 1980๋ ๋ ์๋นํ ์ธ๊ธฐ๋ฅผ ๋์๋ค.
1987๋ KAIST์ ๋ณ์ข ํ์ '๋ํ'์ด๋ผ๋ ํ๊ตญ์ด ํฌ์ค๋ฅผ ๊ฐ๋ฐํ๋ค. ํฌ์ค์ ํ์ฅ์ฑ์ผ๋ก ๋จ์ด๋ฅผ ํ๊ตญ์ด๋ก ๋ฐ๊ฟ ๋ง๋ ๊ฒ์ด๋ค. ์ด๋ ๋น์ ๋ง์ดํฌ๋ก์ํํธ์จ์ด, ๊ณผํ๋์ ๋ฑ์ง์๋ ์๊ฐ๋๋ค.
์ดํ ํฌ์ค์ ์คํ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๋ ๊ฐ๋ ์ Factor, Joy ์ธ์ด, ๊ทธ๋ฆฌ๊ณ ํฌ์คํธ์คํฌ๋ฆฝํธ์๋ ์ํฅ์ ์ฃผ์๋ค.
๋๋ฆฌ ๋ณด๊ธ๋ ์ดํ, 1979๋ ๊ณผ 1983๋ ์ FORTH-79. FORTH-83์ผ๋ก ์ ๋ฆฌ๋์๊ณ , ์ด๋ 1994๋ ANSI์ ์ํด ํ์คํ๋์๋ค.
ํฌ์ค๋ ๊ฐ๋ณ๊ณ ๋จ์ํ๊ธฐ ๋๋ฌธ์ 1980๋ ๋ ์๋นํ ์ธ๊ธฐ๋ฅผ ๋์๋ค.
1987๋ KAIST์ ๋ณ์ข ํ์ '๋ํ'์ด๋ผ๋ ํ๊ตญ์ด ํฌ์ค๋ฅผ ๊ฐ๋ฐํ๋ค. ํฌ์ค์ ํ์ฅ์ฑ์ผ๋ก ๋จ์ด๋ฅผ ํ๊ตญ์ด๋ก ๋ฐ๊ฟ ๋ง๋ ๊ฒ์ด๋ค. ์ด๋ ๋น์ ๋ง์ดํฌ๋ก์ํํธ์จ์ด, ๊ณผํ๋์ ๋ฑ์ง์๋ ์๊ฐ๋๋ค.
์ดํ ํฌ์ค์ ์คํ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๋ ๊ฐ๋ ์ Factor, Joy ์ธ์ด, ๊ทธ๋ฆฌ๊ณ ํฌ์คํธ์คํฌ๋ฆฝํธ์๋ ์ํฅ์ ์ฃผ์๋ค.
3. ๋ฌธ๋ฒ[ํธ์ง]
์ฃผ๋ก ์ฐ์ด๋ ๊ตฌํ์ฒด์ธ GForth์ ๋งค๋ด์ผ์์ ์์ด๋ก ๋ Forth ํํ ๋ฆฌ์ผ์ด ์์ด์ ํฌ์ค์ ๋ํด์ ๊ณต๋ถํ ์ ์๋ค. ์์ธํ ์ค๋ช
์ ์ด๊ณณ์์ ๋ฐฐ์ฐ๋ ๊ฒ์ด ์ข๋ค. GForth์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒ๋ค๋ ํฌํจ๋์ด์์ผ๋, ํ์ค์ ๊ฐ์ด ๋ณ๊ธฐํด๋๋ฏ๋ก ํฐ ๋ฌธ์ ๋ ์๋ค.
3.1. ์ฌ์น์ฐ์ฐ[ํธ์ง]
ํฌ์ค๋ ์ญํด๋๋ ํ๊ธฐ๋ฒ์ผ๋ก ์์ ๊ธฐ์ ํ๋ค. ๋จ์ด๋ค์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋๋ค.
'2 + 3 ร 5'์ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ด๋ค. ์ค์ ํ๊ธฐ๋ฒ์ผ๋ก ์ ์ ์์๋ ์ฌ์น์ฐ์ฐ์ ์ฐ์ ์์๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์, ๊ณฑ์ ์ ๋จผ์ ๊ณ์ฐํด์ฃผ์ด์ผ ํ๋ค.
'2 + 3 ร 5'์ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ด๋ค. ์ค์ ํ๊ธฐ๋ฒ์ผ๋ก ์ ์ ์์๋ ์ฌ์น์ฐ์ฐ์ ์ฐ์ ์์๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์, ๊ณฑ์ ์ ๋จผ์ ๊ณ์ฐํด์ฃผ์ด์ผ ํ๋ค.
2 3 5 * + .
- ์คํ์ ๊ฐ์ ์ฝ์ ํด (2, 3, 5)์ ๊ฐ์ด ์๋ค.
- ์ฐ์ฐ์ * ์ ์ํด ์คํ์๋ (2, 15)์ ๊ฐ์ด ์๋ค.
- ์ฐ์ฐ์ + ์ ์ํด ์คํ์๋ (17)์ ๊ฐ์ด ์๋ค.
- ๋ช ๋ น์ด . ์ ์ํด ์คํ์ ๊ฐ์ฅ ์์ ์๋ ๊ฐ 17์ด ์ถ๋ ฅ๋๋ค. ์คํ์๋ ์๋ฌด ๊ฐ๋ ์๋ค.
'( 2 + 3 ) ร 5'๋ฅผ ๊ณ์ฐํ ๋, ํฌ์ค๋ ์ค์ ํ๊ธฐ๋ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ๊ดํธ๊ฐ ํ์ํ์ง ์๋ค. ๊ณ์ฐ์ ์ฐ์ ์์๋ฅผ ๊ณ ๋ คํ์ฌ ๊ฐ์ ์ฝ์ , ๊ณ์ฐํ๋ฉด ๋๋ค.
2 3 + 5 * .
- ์คํ์ ๊ฐ์ ์ฝ์ ํด (2, 3)์ ๊ฐ์ด ์๋ค.
- ์ฐ์ฐ์ + ์ ์ํด ์คํ์๋ (5)์ ๊ฐ์ด ์๋ค.
- ์คํ์ ๊ฐ์ ์ฝ์ ํด (5, 5)์ ๊ฐ์ด ์๋ค.
- ์ฐ์ฐ์ * ์ ์ํด ์คํ์๋ (25)์ ๊ฐ์ด ์๋ค.
- ๋ช ๋ น์ด . ์ ์ํด ์คํ์ ๊ฐ์ฅ ์์ ์๋ ๊ฐ 25๊ฐ ์ถ๋ ฅ๋๋ค. ์คํ์๋ ์๋ฌด ๊ฐ๋ ์๋ค.
3.2. ๋จ์ด[ํธ์ง]
ํฌ์ค๋ ๋จ์ด๋ฅผ ์ ์ํ์ฌ ๊ทธ ๋จ์ด๊ฐ ๋ฌด์จ ํ๋์ ํ ์ง๋ฅผ ์ ํ๋ค. ์ด๋ ๋ค๋ฅธ ์ธ์ด์์์ ํจ์์ฒ๋ผ ์ฐ์ธ๋ค. ์ฐจ์ด์ ์ ๋ค๋ฅธ ์ธ์ด์์์ ํจ์๋ ์
๋ ฅ๋๋ ๋งค๊ฐ๋ณ์์ ์ถ๋ ฅ๊ฐ์ด ์กด์ฌํ์ง๋ง, ํฌ์ค๋ ์คํ ๊ธฐ๋ฐ ์ธ์ด์ด๊ธฐ์ ์ฝ๋์ ๊ธฐ์ ํ ๋งํผ์ ์คํ์ ์๋นํ๊ณ ๊ฐ์ ์คํ์ ๋จ๊ธด๋ค. ํฌ์ค๋ ์ด๋ฌํ ์คํ์ ๋ณํ๋ฅผ ๋จ์ด๋ฅผ ์ ์ํ ๋ ์๊ดํธ๋ฅผ ํ์ฉํ์ฌ ์ฃผ์์ผ๋ก ์ ์ด ๋๋๋ค.
ํฌ์ค์ ์ฅ์ ์ ํ์ฅ์ฑ์ผ๋ก ์๊ผฝํ๋๋ฐ, ๊ทธ ์ด์ ๋ ๋จ์ด๋ฅผ ์ ์ํจ์ ์์ด์ ํฐ ์ ํ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ธฐ์กด์ ๋จ์ด๋ฅผ ๋ค์ ์ฌ์ ์ํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์์ปจ๋ ์ฐ์ฐ์ + ๋ฅผ ๋ค๋ฅธ ์ญํ ์ ํ๊ฒ ๋ง๋ค๊ฑฐ๋, '๋ํ๊ธฐ'๋ ์ด๋ฆ์ ์ฐ์ฐ์๋ฅผ ์๋ก ๋ง๋ค์ด ๋ํ๊ธฐ์ ์ญํ ์ ํ๊ฒ ๋ง๋ค ์ ์๋ค. ๋ค๋ง ํฌ์ค๋ ๋จ์ด์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ณํ์ง ์๋ ํน์ง์ด ์๊ณ , ํฌ์ค ์์ฒด๊ฐ ์์ ์ค๋ช ํ๋ฏ ๊ณต๋ฐฑ์ผ๋ก ๋จ์ด๋ฅผ ๊ตฌ๋ถํ๊ธฐ ๋๋ฌธ์ ๋จ์ด ์ค๊ฐ์๋ ๊ณต๋ฐฑ์ด ๋ค์ด๊ฐ ์ ์๋ค.
์์ ์ฝ๋์์๋ ๋ ์ ์๋ฅผ ๋ํ๊ณ ์ถ๋ ฅํ ๋ค, ๋ค์ ๊ทธ ๊ฐ์ ์คํ์ ๋จ๊ธฐ๋ ๋จ์ด์ธ addprint๋ฅผ ์ ์ํ๋ค. : (์ฝ๋ก )์ ๋จ์ด๋ฅผ ์ ์ํ๋ ๋จ์ด์ด๋ค. ์ธ๋ฏธ์ฝ๋ก ๋ค์๋ ๋จ์ด์ ์ด๋ฆ์ ๊ธฐ์ ํ๊ณ , ; (์ธ๋ฏธ์ฝ๋ก )์ด ์ค๊ธฐ ์ ๊น์ง ๋จ์ด์ ํ๋์ ๊ธฐ์ ํ๋ค.
ํฌ์ค์ ์ฅ์ ์ ํ์ฅ์ฑ์ผ๋ก ์๊ผฝํ๋๋ฐ, ๊ทธ ์ด์ ๋ ๋จ์ด๋ฅผ ์ ์ํจ์ ์์ด์ ํฐ ์ ํ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ธฐ์กด์ ๋จ์ด๋ฅผ ๋ค์ ์ฌ์ ์ํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์์ปจ๋ ์ฐ์ฐ์ + ๋ฅผ ๋ค๋ฅธ ์ญํ ์ ํ๊ฒ ๋ง๋ค๊ฑฐ๋, '๋ํ๊ธฐ'๋ ์ด๋ฆ์ ์ฐ์ฐ์๋ฅผ ์๋ก ๋ง๋ค์ด ๋ํ๊ธฐ์ ์ญํ ์ ํ๊ฒ ๋ง๋ค ์ ์๋ค. ๋ค๋ง ํฌ์ค๋ ๋จ์ด์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ณํ์ง ์๋ ํน์ง์ด ์๊ณ , ํฌ์ค ์์ฒด๊ฐ ์์ ์ค๋ช ํ๋ฏ ๊ณต๋ฐฑ์ผ๋ก ๋จ์ด๋ฅผ ๊ตฌ๋ถํ๊ธฐ ๋๋ฌธ์ ๋จ์ด ์ค๊ฐ์๋ ๊ณต๋ฐฑ์ด ๋ค์ด๊ฐ ์ ์๋ค.
: addprint ( n1 n2 -- n1+n2 )
+ dup .
;
์์ ์ฝ๋์์๋ ๋ ์ ์๋ฅผ ๋ํ๊ณ ์ถ๋ ฅํ ๋ค, ๋ค์ ๊ทธ ๊ฐ์ ์คํ์ ๋จ๊ธฐ๋ ๋จ์ด์ธ addprint๋ฅผ ์ ์ํ๋ค. : (์ฝ๋ก )์ ๋จ์ด๋ฅผ ์ ์ํ๋ ๋จ์ด์ด๋ค. ์ธ๋ฏธ์ฝ๋ก ๋ค์๋ ๋จ์ด์ ์ด๋ฆ์ ๊ธฐ์ ํ๊ณ , ; (์ธ๋ฏธ์ฝ๋ก )์ด ์ค๊ธฐ ์ ๊น์ง ๋จ์ด์ ํ๋์ ๊ธฐ์ ํ๋ค.
- : ๋ฅผ ํตํด ๋จ์ด๋ฅผ ์ ์ํ๊ธฐ ์์ํ๋ค.
- ๋จ์ด์ ์ด๋ฆ์ addprint์ด๋ค.
- ์๊ดํธ๋ฅผ ํตํด ์คํ์ ๋ณํ๋ฅผ ์ฃผ์์ผ๋ก ๊ธฐ์ ํด๋์๋ค.
- -- ์์ ์๋นํ ๊ฐ, ๋ค๋ ๋ด๋์ ๊ฐ์ด๋ค.
- ๋ ์ ์ n1๊ณผ n2๋ฅผ ์๋นํ ๊ฒ์์ ์๋ ค์ค๋ค.
- n1๊ณผ n2๋ฅผ ๋ํ ๊ฐ์ ๋ด๋์ ๊ฒ์์ ์๋ ค์ค๋ค.
- ๋จ์ด๋ '+ dup .' ์ ํ๋์ ์ทจํ๋ค.
- + ์ฐ์ฐ์๋ฅผ ํตํด ์ฐ์ ์คํ์ ๋ ๊ฐ์ ๋ฝ์ ๋ํ๋ค.
- dup ๋ช ๋ น์ด๋ฅผ ํตํด ์คํ์ ๋งจ ์์ ์๋ ๊ฐ, ์ฆ ์์์ ๋ํ ๊ฐ์ ๋ณต์ฌํด ์คํ์ ๋งจ ์์ ์ถ๊ฐํ๋ค.
- . ๋ช ๋ น์ด๋ฅผ ํตํด ์คํ์ ๋งจ ์์ ์๋ ๊ฐ์ ์ถ๋ ฅํ๋ค. ์คํ์๋ ๋ํ ๊ฐ์ด ์ฌ์ ํ ๋จ์๋ค.
- ; ๋ฅผ ํตํด ๋จ์ด์ ์ ์๋ฅผ ๋ง์น๋ค.
์คํ ๋ณํ์ ๋ํ ์ฃผ์์ผ๋ก ์ฐ์ด๋ ์๊ดํธ์๋ ์๋นํ ๊ตฌ์ฒด์ ์ธ ์ ๋ณด๋ฅผ ์ ์ ์ ์๊ณ ๊ทธ๊ฒ์ ์ด๋ ์ ๋์ ํ์์ ๊ฐ๊ณ ์๋ค. ํ์ง๋ง ์ค์ ๋ก ์คํ์ ๋ฏธ์น๋ ์ํฅ์ ์๋ค.
3.2.1. ์ง์ญ๋ณ์[ํธ์ง]
๋จ์ด์์ ์ฌ์ฉํ ๊ฐ์ด ์ฌ๋ฌ ๋ฒ์ ์๋น๋ฅผ ๊ฑฐ์น๋ ๊ฒฝ์ฐ์, dup ๋ฑ์ ์คํ ์กฐ์ ๋ช
๋ น์ด๋ฅผ ์ด์ฉํด ์คํ์ ์ด์ฉํ๋ ๊ฒ์ ๋งค์ฐ ๋ฒ๊ฑฐ๋ก์ด ์ผ์ด๋ค. ๋ฐ๋ผ์ ๋จ์ด์์์ ์ง์ญ ๋ณ์๋ฅผ ์ ์ํ ์ ์๋ค. ์ด๋ ๋ค๋ฅธ ์ธ์ด์์์ ํจ์์ ๋งค๊ฐ๋ณ์์ ๋น์ทํ ์ฌ์ฉ๋ฒ์ด๋ค.
์ด๋ฅผ ์ด์ฉํด ์์ ์ ์ํ addprint๋ฅผ ๊ฐ์กฐํด๋ณธ๋ค.
์ด๋ฅผ ์ด์ฉํด ์์ ์ ์ํ addprint๋ฅผ ๊ฐ์กฐํด๋ณธ๋ค.
: addprint2 { a b } ( n1 n2 -- n1+n2 )
a .
'+' emit space
b .
." = "
a b + dup .
;
- ์ค๊ดํธ ๋ด์ ๋ค์ด๊ฐ์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ๋จ์ด๋ค์ ์ง์ญ๋ณ์๊ฐ ๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ a๊ฐ ๋จผ์ ๋ค์ด๊ฐ ๊ฐ, b๊ฐ ๋์ค์ ๋ค์ด๊ฐ ๊ฐ, ์ฆ ์คํ์ ๋งจ ์์ ์๋ ๊ฐ์ด๋ค. - a ๋ก ์ง์ญ๋ณ์ a์ ๊ฐ์ ์คํ์ ๋ฃ๋๋ค. ์ดํ . ๋ช ๋ น์ด๋ก ์ถ๋ ฅํ๋ค. ์ดํ b๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ถ๋ ฅ๋๋ค.
- '+' ๋ ๋ฌธ์ ๋ฆฌํฐ๋ด๋ก ํด๋นํ๋ ๋ฌธ์์ ์์คํค ์ฝ๋๊ฐ์ ์คํ์ ๋ฃ์๋ค.
์ดํ emit ๋ช ๋ น์ด๋ก ๊ทธ ์ฝ๋์ ๋ง๋ ๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ค. - space ๋ช ๋ น์ด๋ก ๊ณต๋ฐฑ ํ๋๋ฅผ ์ถ๋ ฅํ๋ค.
- ." ๋ช ๋ น์ด๋ ๊ณต๋ฐฑ ์ดํ " (์๋ฐ์ดํ)๊น์ง ์ฌ ๋ฌธ์์ด์ ์ถ๋ ฅํ๋ค.
๋ฐ๋ผ์ "(a์ ๊ฐ) + (b์ ๊ฐ) = "์ ๋ฌธ์์ด์ด ํ๋ฉด์ ์ถ๋ ฅ๋๋ค. - a b ๋ก a์ b์ ๊ฐ์ ์คํ์ ๋ฃ๊ณ , ์ด์ ์ฒ๋ผ ๊ณ์ฐํด์ ์ถ๋ ฅํ๋ค.
์คํ์๋ a์ b๋ฅผ ๋ํ ๊ฐ์ด ๋จ๋๋ค.
์์๋ก ์ ์ ์ฝ๋์ ๊ฐํ์ด ๋ง์ด ๋์ด์๋ค. ๊ฐํ์ ํน๋ณํ ์๋ฏธ๊ฐ ์๋ ๊ฒ์ด ์๋๊ณ ๋ค๋ฅธ ๊ณต๋ฐฑ๊ณผ ํ๋ ์ผ์ด ๊ฐ์ง๋ง, ์ฝ๋๋ฅผ ๋ณด๊ธฐ ์ฝ๊ฒ ํด ์ฃผ๋ ์ฅ์ ์ด ์๋ค. ์ค์ ๋ก ์ฝ๋๋ฅผ ํ ์ค๋ก ์ด์ด ์ธ ์๋ ์๋ค. ๊ฐ๋จํ ๋จ์ด์ ๊ฒฝ์ฐ์๋ ๊ทธ๋ ๊ฒ ์ ์ํ๋ ๊ฒ์ด ์ ํธ๋๋ค.
3.3. ์ ์ด๋ฌธ[ํธ์ง]
ํฌ์ค์์๋ ์ ์ด๋ฌธ์ ๋จ์ด ์ ์ ๋ด์์๋ง ์ฌ์ฉํ ์ ์๋ค. ์ ์ด๋ฌธ์ ์กฐ๊ฑด์ผ๋ก๋ ์ ์ํ ๊ฐ์ด ์ฐ์ด๋๋ฐ, 0์ ๊ฑฐ์ง, 0์ด ์๋ ๊ฐ์ ์ฐธ์ผ๋ก ์ทจ๊ธ๋๋ค. true ์ false ๋จ์ด๋ฅผ ํตํด ์ฐธ๊ฐ์ ํํํ ์๋ ์๋ค.
3.3.1. ์กฐ๊ฑด๋ฌธ[ํธ์ง]
3.3.1.1. if ๋ฌธ[ํธ์ง]
if, else, then ๋จ์ด๋ก ์กฐ๊ฑด ์คํ์ ํ ์ ์๋ค. gforth์์ then ๋์ endif๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๋ ์ซ์ ์ค ํฐ ์ซ์๋ง์ ๋จ๊ธฐ๋ ๋จ์ด max๋ฅผ ๋ง๋ค์ด๋ณธ๋ค.
: max ( n1 n2 -- n )
2dup
< if
drop
else
nip
endif
;
- 2dup ๋ช ๋ น์ด๊ฐ ์คํ์ ๋ ์์๋ฅผ ๊ทธ๋๋ก ๋ณต์ ํ๋ค.
- < ๋ฅผ ํตํด ์คํ์ ์ ๊ฐ์ด ๋ ํฌ๋ฉด true, ๊ทธ๋ ์ง ์์ผ๋ฉด false๊ฐ ์คํ์ ๋จ๋๋ค.
- if ๋ ์คํ์์ ๊ฐ์ ๋ฝ์ ์ฐธ์ผ ๋์ ๊ฑฐ์ง์ผ ๋๋ฅผ ๊ฐ๋ ค ์กฐ๊ฑด ์คํ์ ํ๋ค.
if ์ดํ else๋ endif๊ฐ ์ค๊ธฐ ์ ๊น์ง์ ์ฝ๋๋ ์ฐธ์ด๋ฉด ์คํ๋๋ค.
์ฐธ์ผ ๊ฒฝ์ฐ drop ๋ช ๋ น์ด๋ฅผ ํตํด ์คํ์ ๋งจ ์ ๊ฐ์ ๋ฒ๋ฆฐ๋ค. - else ์ดํ endif๊ฐ ์ค๊ธฐ ์ ๊น์ง์ ์ฝ๋๋ ๊ฑฐ์ง์ผ ๊ฒฝ์ฐ ์คํ๋๋ค.
์ด๋ else๋ ๊ผญ ์์ด๋ ๋๋ค. ๊ฑฐ์ง์ผ ๊ฒฝ์ฐ nip ๋ช ๋ น์ด๋ฅผ ํตํด ์คํ์ ๋งจ ์์์ ๋ฐ๋ก ์๋ซ ๊ฐ์ ๋ฒ๋ฆฐ๋ค. - endif๋ก ์กฐ๊ฑด๋ฌธ์ ์ข ๋ฃํ๋ค.
3.3.1.2. case ๋ฌธ[ํธ์ง]
๋ค๋ฅธ ์ธ์ด์์์ switch ~ case ๋ฌธ๊ณผ ์ ์ฌํ๋ค.
์ ์ฝ๋๋ case ๋ฌธ์์ ์คํ์์ ๊ฐ์ ๋ฝ์ ์ผ์นํ๋ ๊ฐ์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์คํํ๋ค.
case
1 of ." one" endof
2 of ." two" endof
3 of ." three" endof
2 2 + of ." four" endof
." other number"
endcase
์ ์ฝ๋๋ case ๋ฌธ์์ ์คํ์์ ๊ฐ์ ๋ฝ์ ์ผ์นํ๋ ๊ฐ์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์คํํ๋ค.
3.3.2. ๋ฐ๋ณต๋ฌธ[ํธ์ง]
3.3.2.1. begin ~ ๋ฌธ[ํธ์ง]
begin์ผ๋ก ์์ํ๋ ๋ฐ๋ณต๋ฌธ์ ๊ฐ๋จํ ๋ฐ๋ณต๋ฌธ์ด๋ค. C์ธ์ด๋ ๋ค๋ฅธ ๋น์ทํ ์ธ์ด์์์ ๋ฌดํ๋ฃจํ, while๋ฌธ, do-whlie๋ฌธ์ ํด๋นํ๋ค. begin ๋จ์ด๋ ์ผ๋จ ๋ฐํ์์์ ๋ง๋๋ฉด ์๋ฌด ์ผ์ ํ์ง ์์ผ๋ฉฐ, ๋ฃจํ๊ฐ ๋๋๋ฉด ์ ํํด์ ๋๋์์ฌ ์์น๋ฅผ ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค.
begin ~ again ๋ฌธ์ ๋ฌดํ ๋ฃจํ์ด๋ค. ์ด ์ฝ๋๋ 0๋ถํฐ ์ซ์๋ฅผ ๊ณ์ ์ฆ๊ฐ์์ผ ๋๊ฐ๋ฉด์ ์ถ๋ ฅํ๋ ์ฝ๋์ด๋ค. 'Ctrl + C'๋ฅผ ํค๋ณด๋๋ก ๋๋ฌ ์ธํฐ๋ฝํธ๋ฅผ ์ผ์ผ์ผ ํ์ถํ ์ ์๋ค.
์ด ์ฝ๋๋ 0๋ถํฐ 10๊น์ง ์ถ๋ ฅํ๋ค. begin ~ until ๋ฌธ์ until๋ฌธ์์ ์กฐ๊ฑด์ ํ๋จํ์ฌ ๊ฑฐ์ง์ด๋ฉด ๋ฐ๋ณตํ๋ค. ๋ค๋ฅธ ์ธ์ด์์์ do-while๋ฌธ๊ณผ ๋น์ทํ๋ค.
์ด ์ฝ๋๋ 1๋ถํฐ 9๊น์ง ์ถ๋ ฅํ๋ค. ์ฐ์ begin๋ฌธ ์ดํ์ ์ฝ๋๋ฅผ ์คํํ ๋ค์ while๋ฌธ์์ ์กฐ๊ฑด์ ํ๋จํ์ฌ ์ฐธ์ด๋ฉด repeat๊น์ง ์คํํ๊ณ ๋ฐ๋ณตํ๋ค. while์์ ๊ฑฐ์ง์ผ ๊ฒฝ์ฐ repeat ์ดํ๋ก ์ ํํ๋ค. ๋ค๋ฅธ ์ธ์ด์์์ while๋ฌธ๊ณผ ๋น์ทํ๋ค.
0
begin
dup . 1 +
again
begin ~ again ๋ฌธ์ ๋ฌดํ ๋ฃจํ์ด๋ค. ์ด ์ฝ๋๋ 0๋ถํฐ ์ซ์๋ฅผ ๊ณ์ ์ฆ๊ฐ์์ผ ๋๊ฐ๋ฉด์ ์ถ๋ ฅํ๋ ์ฝ๋์ด๋ค. 'Ctrl + C'๋ฅผ ํค๋ณด๋๋ก ๋๋ฌ ์ธํฐ๋ฝํธ๋ฅผ ์ผ์ผ์ผ ํ์ถํ ์ ์๋ค.
0
begin
dup . 1 +
dup 10 >
until
์ด ์ฝ๋๋ 0๋ถํฐ 10๊น์ง ์ถ๋ ฅํ๋ค. begin ~ until ๋ฌธ์ until๋ฌธ์์ ์กฐ๊ฑด์ ํ๋จํ์ฌ ๊ฑฐ์ง์ด๋ฉด ๋ฐ๋ณตํ๋ค. ๋ค๋ฅธ ์ธ์ด์์์ do-while๋ฌธ๊ณผ ๋น์ทํ๋ค.
0
begin
1 +
dup 10 <
while
dup .
repeat
์ด ์ฝ๋๋ 1๋ถํฐ 9๊น์ง ์ถ๋ ฅํ๋ค. ์ฐ์ begin๋ฌธ ์ดํ์ ์ฝ๋๋ฅผ ์คํํ ๋ค์ while๋ฌธ์์ ์กฐ๊ฑด์ ํ๋จํ์ฌ ์ฐธ์ด๋ฉด repeat๊น์ง ์คํํ๊ณ ๋ฐ๋ณตํ๋ค. while์์ ๊ฑฐ์ง์ผ ๊ฒฝ์ฐ repeat ์ดํ๋ก ์ ํํ๋ค. ๋ค๋ฅธ ์ธ์ด์์์ while๋ฌธ๊ณผ ๋น์ทํ๋ค.
3.3.2.2. ํ์ ๋ฐ๋ณต๋ฌธ[ํธ์ง]
๋ค๋ฅธ ์ธ์ด์์์ for๋ฌธ๊ณผ ์ ์ฌํ๋ค. ํ์ ๋ฐ๋ณต๋ฌธ์ ํน์ง์ผ๋ก๋ ๋ฐ๋ณต๋ฌธ์ ์ธ๋ ์ง์ญ๋ณ์๊ฐ ์๋์ผ๋ก ์์ฑ๋๋ค๋ ์ ์ด๋ค. ๋๋ฌ์ธ์ธ ์์๋๋ก i, j, k์ ์ธ ๊ฐ์ง ์ง์ญ๋ณ์๊ฐ ์์ฑ๋์ด ์ฌ์ฉํ ์ ์๋ค.
3.3.2.2.1. ?do ~ loop ๋ฌธ[ํธ์ง]
๋ค์์ 0๋ถํฐ 9๊น์ง 10๊ฐ์ ์ซ์๋ฅผ ์ถ๋ ฅํ๋ ๋ฐ๋ณต๋ฌธ์ด๋ค.
GForth์์ ์ซ์์ ์ฆ๊ฐ์ ์กฐ์ ํ๋ ค๋ฉด loop๋ฅผ ์ฌ์ฉํ๋ ๋์ +loop ๋ -loop ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ด ๋์ ์์ ์ค๋ ๊ฐ์ ๋ฝ์ผ๋ฉด์ ๊ทธ ๊ฐ๋งํผ ์ฆ๊ฐํ๊ฒ ๋๋ค. +loop๋ ๋ถํธ ์๋ ์ ์๊ฐ, -loop๋ ๋ถํธ ์๋ ์ ์๊ฐ์ ์ฌ์ฉํ๋ฉฐ '-1 +loop'์ '1 -loop'๋ ๋์ผํ ์๋์ ํ๋ค.
๋ค์์ 10๋ถํฐ 1๊น์ง 10๊ฐ์ ์ซ์๋ฅผ ์ถ๋ ฅํ๋ ๋ฐ๋ณต๋ฌธ์ด๋ค.
๋ํ GForth์์๋ ?do ๋์ ์ +do ๋ -do ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ ์์ ํ ๋ฐฉ๋ฒ์ผ๋ก์จ, ๋ฐ๋ณต๋ฌธ์ ์์๊ณผ ๋์ ์๋ชป ์ ์ด ๋ฐฉํฅ์ด ์ด์ํ ๊ฒฝ์ฐ ๋ฐ๋ณต์ ํ์ฉํ์ง ์๋๋ค.
leave ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ๋ณต๋ฌธ์ ๋์ค์ ๋น ์ ธ๋์ค๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. ๋ค๋ฅธ ์ธ์ด์์์ break ์ ๊ฐ๋ค.
unloop exit ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ ๊ฐ์ ํจ๊ณผ๋ฅผ ๊ฐ์ง๋ค.
10 0 ?do
i .
loop
GForth์์ ์ซ์์ ์ฆ๊ฐ์ ์กฐ์ ํ๋ ค๋ฉด loop๋ฅผ ์ฌ์ฉํ๋ ๋์ +loop ๋ -loop ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ด ๋์ ์์ ์ค๋ ๊ฐ์ ๋ฝ์ผ๋ฉด์ ๊ทธ ๊ฐ๋งํผ ์ฆ๊ฐํ๊ฒ ๋๋ค. +loop๋ ๋ถํธ ์๋ ์ ์๊ฐ, -loop๋ ๋ถํธ ์๋ ์ ์๊ฐ์ ์ฌ์ฉํ๋ฉฐ '-1 +loop'์ '1 -loop'๋ ๋์ผํ ์๋์ ํ๋ค.
๋ค์์ 10๋ถํฐ 1๊น์ง 10๊ฐ์ ์ซ์๋ฅผ ์ถ๋ ฅํ๋ ๋ฐ๋ณต๋ฌธ์ด๋ค.
0 10 -do
i .
1 -loop
๋ํ GForth์์๋ ?do ๋์ ์ +do ๋ -do ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ ์์ ํ ๋ฐฉ๋ฒ์ผ๋ก์จ, ๋ฐ๋ณต๋ฌธ์ ์์๊ณผ ๋์ ์๋ชป ์ ์ด ๋ฐฉํฅ์ด ์ด์ํ ๊ฒฝ์ฐ ๋ฐ๋ณต์ ํ์ฉํ์ง ์๋๋ค.
leave ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ๋ณต๋ฌธ์ ๋์ค์ ๋น ์ ธ๋์ค๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. ๋ค๋ฅธ ์ธ์ด์์์ break ์ ๊ฐ๋ค.
unloop exit ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ ๊ฐ์ ํจ๊ณผ๋ฅผ ๊ฐ์ง๋ค.
3.3.2.2.2. for ~ next ๋ฌธ[ํธ์ง]
๋ณด๋ค ๊ฐ๋จํ ๋ฐ๋ณต๋ฌธ์ผ๋ก๋ for ~ next ๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค. ๋ค์์ ์ด๋ฅผ ํ์ฉํ 10๋ถํฐ 0๊น์ง 11๊ฐ์ ์ซ์๋ฅผ ์ถ๋ ฅํ๋ ๋ฐ๋ณต๋ฌธ์ด๋ค.
10 for
i .
next
4. ๊ตฌํ์ฒด[ํธ์ง]
4.1. GForth[ํธ์ง]
ํํ์ด์ง
GNU ํ๋ก์ ํธ ํ์ด์ง
GNU ํ๋ก์ ํธ์ ์ผ๋ถ๋ก์ ๊ด๋ฆฌ๋๋ ๊ตฌํ์ฒด์ด๋ค. ํ๋ฆฌ์จ์ด, ์์ ์ํํธ์จ์ด์ด๋ค. 1992๋ ์ค๋ฐ Bernd Paysan, Anton Ertl ๊ทธ๋ฆฌ๊ณ Jens Wilke์ ์ํด ๊ฐ๋ฐ๋์๋ค. GForth๋ ANSI/200x Forth ํ์ค์ ์ค์ํ๋ฉฐ, ๋ค์ํ ํ๋ก์ธ์์ ๋ฆฌ๋ ์ค, ๋ง์ดํฌ๋ก์ํํธ ์๋, ๋งฅ OS, ์๋๋ก์ด๋, ๊ทธ๋ฆฌ๊ณ GForth EC ์๋ฒ ๋๋ ์์คํ ์์ ๊ตฌ๋๋๋ค.
GForth๋ GCC๋ก๋ถํฐ ์ง์ ์ ์ผ๋ก ๋น ๋ฅด๊ฒ, ํน์ ๊ฐ์ ์ ์ผ๋ก ์ค๋ ๋๋ ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ค.
GNU ํ๋ก์ ํธ ํ์ด์ง
GNU ํ๋ก์ ํธ์ ์ผ๋ถ๋ก์ ๊ด๋ฆฌ๋๋ ๊ตฌํ์ฒด์ด๋ค. ํ๋ฆฌ์จ์ด, ์์ ์ํํธ์จ์ด์ด๋ค. 1992๋ ์ค๋ฐ Bernd Paysan, Anton Ertl ๊ทธ๋ฆฌ๊ณ Jens Wilke์ ์ํด ๊ฐ๋ฐ๋์๋ค. GForth๋ ANSI/200x Forth ํ์ค์ ์ค์ํ๋ฉฐ, ๋ค์ํ ํ๋ก์ธ์์ ๋ฆฌ๋ ์ค, ๋ง์ดํฌ๋ก์ํํธ ์๋, ๋งฅ OS, ์๋๋ก์ด๋, ๊ทธ๋ฆฌ๊ณ GForth EC ์๋ฒ ๋๋ ์์คํ ์์ ๊ตฌ๋๋๋ค.
GForth๋ GCC๋ก๋ถํฐ ์ง์ ์ ์ผ๋ก ๋น ๋ฅด๊ฒ, ํน์ ๊ฐ์ ์ ์ผ๋ก ์ค๋ ๋๋ ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ค.
4.2. SwiftForth, SwiftX[ํธ์ง]
ํํ์ด์ง
Forth, Inc.๋ก๋ถํฐ ๊ฐ๋ฐ๋๋, ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์์ฑํ๋ ์์ฉ ๊ตฌํ์ฒด์ด๋ค.
SwiftForth๋ 32๋นํธ x86 ํธํ CPU์์ ๋ฆฌ๋ ์ค, ๋ง์ดํฌ๋ก์ํํธ ์๋, ๋งฅ OS์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ IDE๊ฐ ์ ๊ณต, ์ฌ์ฉํ ์ ์๋ค. ๋๋ฒ๊น ํด๋ก ์ญ ์ด์ ๋ธ๋ฌ, ์ญ ์ปดํ์ผ๋ฌ, ๋จ๊ณ๋ณ ๋๋ฒ๊ฑฐ๊ฐ ํฌํจ๋๋ค.
SwiftX๋ ARM์ ๋น๋กฏํ ์๋ฒ ๋๋ ์์คํ ์ ํ๊ฒ์ผ๋ก ํ ๊ตฌํ์ฒด์ด๋ค.
Forth, Inc.๋ก๋ถํฐ ๊ฐ๋ฐ๋๋, ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์์ฑํ๋ ์์ฉ ๊ตฌํ์ฒด์ด๋ค.
SwiftForth๋ 32๋นํธ x86 ํธํ CPU์์ ๋ฆฌ๋ ์ค, ๋ง์ดํฌ๋ก์ํํธ ์๋, ๋งฅ OS์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ IDE๊ฐ ์ ๊ณต, ์ฌ์ฉํ ์ ์๋ค. ๋๋ฒ๊น ํด๋ก ์ญ ์ด์ ๋ธ๋ฌ, ์ญ ์ปดํ์ผ๋ฌ, ๋จ๊ณ๋ณ ๋๋ฒ๊ฑฐ๊ฐ ํฌํจ๋๋ค.
SwiftX๋ ARM์ ๋น๋กฏํ ์๋ฒ ๋๋ ์์คํ ์ ํ๊ฒ์ผ๋ก ํ ๊ตฌํ์ฒด์ด๋ค.
4.3. pForth[ํธ์ง]
ํํ์ด์ง
Github
Phil Burk์ ์ํด C๋ก ์ฐ์ฌ์ง ์คํ ์์ค ๊ตฌํ์ฒด์ด๋ฉฐ, ์ด์์ฑ์ด ํน์ง์ด๋ค. ๋ฆฌ๋ ์ค, ๋ง์ดํฌ๋ก์ํํธ ์๋, ๋งฅ OS์ ๋ง์ ์๋ฒ ๋๋ ์์คํ ์์ ์ฌ์ฉํ ์ ์๋ค.
Github
Phil Burk์ ์ํด C๋ก ์ฐ์ฌ์ง ์คํ ์์ค ๊ตฌํ์ฒด์ด๋ฉฐ, ์ด์์ฑ์ด ํน์ง์ด๋ค. ๋ฆฌ๋ ์ค, ๋ง์ดํฌ๋ก์ํํธ ์๋, ๋งฅ OS์ ๋ง์ ์๋ฒ ๋๋ ์์คํ ์์ ์ฌ์ฉํ ์ ์๋ค.