ํ์คํ ์น๐ ๊ฐ๋ฐ์ ์ง๋ง์ ๐ง๐ฝโ๐ป
โ ์ธ๊ณต์ง๋ฅ ๊ด์ฌ ๐ค
Recent views
- 1 OSSU PL-A Section 1
- 2
- 3
- 4
- 5
OSSU PL-A Section 1
์ถ์ฒ ๊ฐ์
Programming Languages, Part A, ์์ฑํด ๋ํ๊ต
Programming Languages, Part A, ์์ฑํด ๋ํ๊ต
๋ณด์ ํ์ธ : ์ธ๋ถ๋งํฌ
"https://www.coursera.org/learn..."๋ก
?
- ํํ๊ณผ ๋ณ์ ๋ฐ์ธ๋ฉ(Expression and Variable Bindings)
- pair์ tuple
- List
- ์ง์ญ ๋ณ์
- Options
- ๋ณ๊ฒฝ(Mutation)์ ๋ถ์ฌ์ ์ด๋ก ์ธํ ์ด๋
OSSU PL-A Section 1
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๋ฐฐ์ธ ๋๋ ๋ค์๊ณผ ๊ฐ์ ๋ถ๋ถ์ ๋ฐฐ์ฐ๋ ๊ฒ์ด๋ค.
- ๋ฌธ๋ฒ (Syntax): ์ด๋ป๊ฒ ๋์์ ํํํ๋ ๊ฐ? (ex)
int x = 3;
) - ์๋ฏธ (Semantics): ํด๋น ๊ธฐ๋ฅ์ ์ด๋ค์์ผ๋ก ๊ตฌํํ๋๊ฐ? (ex)
x
๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ ๊ณผ์ ) - ๊ด์ฉ๊ตฌ (Idioms): ํด๋น ๋์์ ์ํ ํํ์ ์ด๋ค ์์ผ๋ก ์ ๊ทผํ๋๊ฐ, ์ผ์ข
์ ๋ฌธ๋ฒ์ ๋ชจ์ (ex) ํน์ List๋ฅผ ์ํํ๊ธฐ ์ํด ํ์ด์ฌ์
for
๋ฌธ์,Racket
์ ์ฌ๊ท๋ฅผ ๋ง์ด ์ด์ฉํจ.) - ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Libraries): ์ด๋ฏธ ์ง์ํ๊ณ ์๋ ์ฝ๋๋ ํน์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด ํ์์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(ex) ํ์ผ ์ ๊ทผ์ ์ํ
os
๋ผ์ด๋ธ๋ฌ๋ฆฌ) - ๋๊ตฌ๋ค(Tools): ํ๋ก๊ทธ๋จ์ ๊ตฌํํ๋๋ฐ ์ฌ์ฉ๋๋ ๋๊ตฌ๋ค (ex) ์ปดํ์ผ๋ฌ, ๋๋ฒ๊ฑฐ, ๋ํํ ๋๊ตฌ ๋ฑ)
ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฐ์ธ ๋ ๋ง์ ์ฌ๋๋ค์ ๋ฌธ๋ฒ(Syntax), ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ๊ฐ์กฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ง๋ง ์ ๋ง ์ค์ํ ๋ถ๋ถ์ ์๋ฏธ(semantics)์ ๊ด์ฉ๊ตฌ(idioms)๋ค.
ํํ๊ณผ ๋ณ์ ๋ฐ์ธ๋ฉ(Expression and Variable Bindings)
ํ๋ก๊ทธ๋จ์ ๋ฐ์ธ๋ฉ์ ๋์ด๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, ๊ฐ ๋ฐ์ธ๋ฉ์ ํ์ ํ์ธ ์ดํ ํ๊ฐ(evaluate) ๊ณผ์ ์ ๊ฑฐ์น๋ค.
๋ฌธ๋ฒ(syntax)
๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ์ธ๋ฉ์ ํํํ๋ค.
val x = e;
val
์ ํค์๋x
๋ ๋ณ์๋ช ,e
๋ ํํ์ด๋ฉฐ, PL์ ๋ฐ๋ผ;
๋ฅผ ์๋ตํ๊ธฐ๋ ํ๋ค.์๋ฏธ(semantics)
์ ์ ํ๊ฒฝ(static environment)์ ๋ฐ์ธ๋ฉ์ ํ์ ์, ๋์ ํ๊ฒฝ(dynamic environment)์ ๋ฐ์ธ๋ฉ์ ๊ฐ์ ์ ์ฅํ๋ค.
์ฌ๊ธฐ์ ๋งํ๋ ์ ์ ํ๊ฒฝ์ ๋ณดํตcontext
๋ก, ๋์ ํ๊ฒฝ์Environment
๋ก ๋ง์ด ์นญํด์ง๋ค.
- ๋ฐ์ธ๋ฉ์ ํ์
ํ์ธ๊ณผ ํ๊ฐ(Evaluation)์ ์งํ
- ์ด์ ๋์ ํ๊ฒฝ๋ฅผ ์ด์ฉํด ํํ
e
์ ๊ฒฐ๊ณผ ๊ฐ์ ์์ฑ - ์ด์ ์ ์ ํ๊ฒฝ๋ฅผ ์ด์ฉํด ํํ
e
์ ํ์ ์ ํ์ธ
- ์ด์ ๋์ ํ๊ฒฝ๋ฅผ ์ด์ฉํด ํํ
- ํด๋น ํ์
์ ์๋ก ํ๊ฒฝ์ ์ถ๊ฐ
x
์ ํ์ ์e
์ ํ์ ํ์ธ ๊ฒฐ๊ณผ์ธt
๋ก ๋งคํํ์ฌ ์๋ก์ด ์ ์ ํ๊ฒฝ ์์ฑ- ` x
์ ๊ฐ์ e์ ๊ฒฐ๊ณผ๊ฐ์ธ
v`๋ก ๋งคํํ์ฌ ์๋ก์ด ๋์ ํ๊ฒฝ ์์ฑ
- ์ด๋
v
๋ ๋ ์ด์ ๊ณ์ฐํ์ง ์์๋ ๋๋ ๊ฐ์ผ๋ก ๋งคํ ๋จ.์์
๋ค์๊ณผ ๊ฐ์ ํ๋ก๊ทธ๋จ์ ์์๋ก ๋ค์ด๋ณด์.
```sml
val x = 1;
val y = 2;
val z = x + y; (* ๋ฐ์ธ๋ฉ ์งํ *)
- ์ด์ ๋์ ํ๊ฒฝ(`x = 1, y = 2`)๋ฅผ ์ด์ฉํด `e(x + y)`๊ฐ ํ๊ฐ๋์ด ์๋ก์ด ๋์ ํ๊ฒฝ `(x = 1, y = 2, z = 3)`์ด ๋ณ๊ฒฝ๋๋ค.
- ์ด๋ ์๋ก์ด ๊ฐ `x + y`๋ ๋์ด์ ๊ณ์ฐ์ด ํ์์น ์๋๋ก `1 + 2`๊ฐ ์๋ `3`์ผ๋ก ํ๊ฐ๋์ด ์ ์ฅ
- ์ด์ ์ ์ ํ๊ฒฝ `(x = int, y = int)`๋ฅผ ์ด์ฉํด `int + int`๊ฐ `int`๋ก ํ๊ฐ๋์ด ์๋ก์ด ์ ์ ํ๊ฒฝ `(x = int, y = int, z = int)`๋ก ๋ณ๊ฒฝ๋๋ค.
์ด๋ ๊ฒ ์์ฑ๋ ๋ฐ์ธ๋ฉ์ ์์ ๋์ง ๋ชปํ์ง๋ง, ๋์ ๋ฎ์ด์์ด์ง ์ ์๋ค.
๋ฐ๋ผ์, `val f = z` ๋ฐ์ธ๋ฉ ์ดํ, `val f = 4` ๋ฐ์ธ๋ฉ์ด ์ถ๊ฐ๋๋ฉด, `f`๋ 4๊ฐ ๋์ง๋ง, `z`๋ ์ฌ์ ํ ์ด์ ๊ณผ ๊ฐ๋ค.
์ถ๊ฐ์ ์ธ ์๋ฅผ ๋ค์ด๋ณด์
- ์กฐ๊ฑด ๋ถ๊ธฐ๋ฌธ
- ๋ฌธ๋ฒ : `if e1 then e2 else e3` (`e1, e2, e3`๋ ํํ)
- ํ์
ํ์ธ: `e1`์ ์กฐ๊ฑด๋ฌธ์์ `bool` ํ์
์ด ๋ค์ด๊ฐ๋ ์๋ฆฌ๋ฉฐ, `e2`, `e3`๋ ์๋ก ๊ฐ์ ํ์
`t`(์๋ฌด ํ์
์ด๋ ๊ฐ๋ฅ)์ด๋ค. ์ถ๊ฐ๋ก ์ ์ ํ๊ฒฝ์ ํ์ธํ์ฌ ํ์
์ ํ์ธ
- ํ๊ฐ: ๋์ ํ๊ฒฝ์ ํ์ธ ๊ฒฐ๊ณผ, `e1`์ ๊ฒฐ๊ณผ ๊ฐ์ด `true`์ด๋ฉด `e2`๊ฐ์ด ๋์ ํ๊ฒฝ ํ์ ํ๊ฐ๋์ด ํด๋น ๋ฐ์ธ๋ฉ์ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ์ ์ฅ๋จ. ๋ฐ๋๋ก `false`์ด๋ฉด `e3`๊ฐ ๋์.
## ํจ์ ๋ฐ์ธ๋ฉ
ํจ์๋ **๊ฒฐ๊ณผ๋ฅผ ๋ด๋ ํํ๊ณผ ์ด์ ์ฌ์ฉ๋๋ ์ธ์๋ค**์ด๋ฉฐ, ์๋์ ๋น์ทํ๊ฒ ํํ๋๋ค.
### ๋ฌธ๋ฒ(syntax)
```sml
fun x0 (x1: t1, ..., xn: tn) = e
- ํจ์ ๋ฐ์ธ๋ฉ ์ด๋ฆ์
x0
- ๊ฐ ์ธ์๋
x1
~xn
์ผ๋ก ๋งคํ๋๋ฉฐ, ๊ฐ ํ์ ์t1
~tn
์ผ๋ก ์ ์ ํ๊ฒฝ์ ๋งคํ๋๋ค. - ๊ฒฐ๊ณผ๊ฐ
e
์๋ฏธ(semantics)
ํ์ ํ์ธ
ํํ e
๋ ์์ ์ ์ ํ๊ฒฝ๊ณผ ๋ช
์๋ ์ธ์๋ค์ ํ์
๋ค์ ํตํด ํ์
t
๋ก ์ ์ถ๋๋ค.
์ฆ, x0
ํจ์์ ํ์
t1 * ... * tn -> t
๋ก ์ ์ ํ๊ฒฝ์ ๋งคํ ๋๋ค.
*
๋SML
์์ ๊ฐ ์ธ์๋ฅผ ๋๋๋๋ฐ ์ฌ์ฉ๋๋ ํํ
์ฌ๊ธฐ์ ๊ฐ ์ธ์x1,...xn
์ ์ ์ ํ๊ฒฝ๊ฐt1,...,tn
์ ์ ์ญ ์ ์ ํ๊ฒฝ์ ์ ์ฅ๋์ง ์๊ณ ํด๋น ํจ์๋ง ์ฌ์ฉํ๋ ์ง์ญ ์ ์ ํ๊ฒฝ์ ์ ์ฅ๋๋ค.ํ๊ฐ
ํจ์ ๋ฐ์ธ๋ฉ์ ํ๊ฐ๋ ๋ฐ๋ก ํ๊ฐ๋์ง ์๊ณ ํจ์๊ฐ ํธ์ถ(called)๋ ๋ ํ๊ฐ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ๊ท ํจ์ ๋ฑ์ด ๊ฐ๋ฅํ๊ฒ ๋๋ค.
ํจ์ ํธ์ถ(Function calls)
ํจ์ ํธ์ถ์
x0 (e1,...,en)
์ ํ์์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
ํ์ ํ์ธ์ ๊ฒฝ์ฐ,x0
์ ํ์ ์ดt1 * ... * tn -> t
์ผ ๊ฒฝ์ฐ ์ ์ฒด ํจ์ ํธ์ถ์ ํ์ ์t
๋ก ์ ํด์ง๋ค.
ํ๊ฐ์ ๊ฒฝ์ฐ- ๊ฐ ํํ
e1,...,en
์ด ๋จผ์ v1,...,vn
์ผ๋ก ํ๊ฐ๋ ํ, ์ด ๊ฐ์ ํตํด ์ ์ฒด ํจ์ ๊ฒฐ๊ณผe
๊ฐv
๋ก ํ๊ฐ๋๋ค. - ์ด๋ ์ ์ฒด ํจ์์ ํ๊ฐ๋๋ ์ ์ , ๋์ ํ๊ฒฝ์ ์ด๋ ์๊ธฐ์ ๊ฒ์ผ๊น? ํจ์๋ฅผ ์ ์ํ ๋? ํจ์๋ฅผ ํธ์ถํ ๋? ์ด๋ ๋์ค์
lexical scope
๋ก ๋ฐฐ์ฐ๊ฒ ๋๋ค.
pair
์ tuple
์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ด ๋ฌถ์ ๋ณตํฉ ๋ฐ์ดํฐ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด pair
๋ tuple
์ ์ง์ํ๋ค.
๋ณดํต ๋ค์๊ณผ ๊ฐ์ด ๋ฐ์ธ๋ฉ ๋๋ค.
val x = (e1, ... ,en) (* x = t1*...*tn ์ผ๋ก ์ ์ ํ๊ฒฝ์ ๋งคํ*)
(*ํํ์ x = (v1,...,vn) ์ฒ๋ผ ๋๋์ด ๋งคํ*)
๋ด๋ถ์๋ ๋ค์ํ ํ์
์ ํํ์ด ๋ค์ด๊ฐ ์ ์์ผ๋ฉฐ tuple
๋ํ ๊ฐ๋ฅํ๋ค.
- ์ด๋๋
x = (t0 * t1)*...*tn
๊ฐ์ด ๊ดํธ๋ฅผ ์ด์ฉํด ๋งคํ๋๋ค.
์๊ฐ ๋์ธtuple
์pair
๋ผ๊ณ ํ๋ค.
์ฌ์ค, ํจ์์ ์ธ์๋ค์ ์ผ์ข ์ ํ๋์ ํํ๋ก ์ทจ๊ธ๋๋ค.
List
๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ๋ฉด, ํน์ ์๊ฐ ์๋ ์์์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ ์ ์๋ค. ๋จ, ํํ๊ณผ ๋ฌ๋ฆฌ ํ๋์ ํ์ ๋ง ๋ค์ด๊ฐ๋ค.
๋ฆฌ์คํธ ๋ด์ ๋ค๋ฅธ ๋ฆฌ์คํธ ๋ํ ๋ค์ด๊ฐ ์ ์๋ค.
๋น์ด์๋ ๋ฆฌ์คํธ๋ []
๋ก ํํ๋๋ฉฐ, a' list
๋ก ์ ์ ํ๊ฒฝ์ ๋งคํ๋๋ฉฐ, a'
๋ ๋ชจ๋ ํ์
์ ์๋ฏธํ๋ ์์ ๊ฐ์ผ๋ก, ๋ชจ๋ ๊ฐ๋ค์ด ๋ฆฌ์คํธ๋ก ๋ค์ด๊ฐ ์ ์๋ค.
๊ฐ์ด ์กด์ฌํ๋ ๋ฆฌ์คํธ [e1, ..., en]
์
[v1, ...., vn]
์ ํํ๋ก ๋์ ํ๊ฒฝ์ ๋งคํ- ์ด๋
e1,..., en
์ ์ ๋ถ ๊ฐ์ ํ์ ์ด์ฌ์ผ ํ๋ฉฐ, ์ด๋ฅผt0
๋ก ๋์ผ๋ฉด ์ ์ ํ๊ฒฝ์t0 list
ํ์ ์ผ๋ก ๋งคํ๋๋ค.
์ง์ญ ๋ณ์
ํจ์ ๋ด์ ์๋ก์ด ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ๋ฉด, ํด๋น ๋ฐ์ธ๋ฉ๋ค์ ๊ธฐ์กด์ ์ ์ญ ํ๊ฒฝ์ ์ด์ฉํ ์ ์์ง๋ง, ํจ์๋ด ์ง์ญ ๋ฐ์ธ๋ฉ๋ค์ ํจ์ ๋ด์์์ ์ฌ์ฉ์ผ๋ก๋ง ๊ตญํ๋๋ค.
์ด๋ฅผ ํตํด ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋๋ฆฌ๊ณ , ๋ณ์๋ช ์ ์ค๋ณต์ ํผํ ์ ์๋ค.
Options
๊ฐ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ(SOME
)์ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ(NONE
)๋ฅผ ๊ตฌ๋ถํ์ฌ ๋ฃ์ ์ ์๊ฒ ํด์ฃผ๋ฉฐ, t option
ํ์์ผ๋ก ์ ์ ํ๊ฒฝ์ ๋งคํ๋๋ค.
null
, isSome
์ ํจ์๋ก NONE
์ธ์ง ํ์ธ ํ ์ ์์ผ๋ฉฐ,valOf
๋ฑ์ผ๋ก ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
๋ณ๊ฒฝ(Mutation)์ ๋ถ์ฌ์ ์ด๋ก ์ธํ ์ด๋
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์ ๋ฐ์ธ๋ฉ ๋ค์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๊ฒ ๋ง๋ ๊ฒฝ์ฐ์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ก ๋๋๋ค.
์ฅ๋จ์ ์ด ์์ง๋ง ๋ณ๊ฒฝ(Mutation)์ด ๋ถ๊ฐ๋ฅํ๋ฉด ๊ฐ์ ๋ํ ์๋ณธ ๊ฐ์ ์์ ์ ๊ทผ ๋ณด์์ ๊ตฌํํ๊ธฐ ์ฝ๊ณ , ๊ณต์ ํ๋ ๊ฐ, ์ฐธ์กฐํ๋ ๊ฐ์ ๋ณ๊ฒฝ์ผ๋ก ์ธํ ์์์น ๋ชปํ ๊ฒฐ๊ณผ๋ฅผ ์๋ฐฉํ ์ ์๋ค.
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๋ค์ ๋ณดํต ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๊ฒ ๋์ด ์์ผ๋ฉฐ, Java์ ๊ฐ์ด ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ ์กด์ฌํ๋ค.
- ๊ทธ๋์ ์๋ฐ์ ๊ฒฝ์ฐ๋ ๊ฐ๋ค์ ์ฐธ์กฐ์ ๋ณต์ฌ ์ฌ๋ถ๋ฅผ ์ผ์ผ์ด ์ ๊ฒฝ์จ์ผํ์ง๋ง ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๊ทธ๋ ์ง ์์๋ ๋๋ค.
_articles/computer_science/OSSU/PL/PLs/OSSU PL-A/OSSU PL-A Section 1.md