ν’€μŠ€νƒ μ›ΉπŸŒ 개발자 지망생 πŸ§‘πŸ½β€πŸ’»
βž• 인곡지λŠ₯ 관심 πŸ€–


Categories


Recent views

  • 1
  • 2
  • 3
  • 4
  • 5

OSSU PL-A Section 2

  1. μƒˆ νƒ€μž… λ§Œλ“€κΈ°
πŸ—£οΈ quote

좜처 κ°•μ˜ Programming Languages, Part A, μ›Œμ‹±ν„΄ λŒ€ν•™κ΅

  1. μƒˆ νƒ€μž… λ§Œλ“€κΈ°

OSSU PL-A Section 2

μƒˆ νƒ€μž… λ§Œλ“€κΈ°

int, string, list 같은 κΈ°λ³Έ 제곡 νƒ€μž… 이외에도 이 νƒ€μž…λ“€μ„ μ‘°ν•©ν•΄ μƒˆλ‘œμš΄ νƒ€μž…μ„ λ§Œλ“€ 수 μžˆλ‹€.

λ˜ν•œ, μ•„λž˜ νƒ€μž…λ“€μ€ μ„œλ‘œ, ν˜Ήμ€ 자기 μžμ‹  νƒ€μž…κ³Ό 쀑첩될 수 있으며, 이λ₯Ό μž¬κ·€ν˜• νƒ€μž…μ΄λΌκ³  ν•œλ‹€.

Record (product-type)

n개의 νƒ€μž…μ„ 각각 ν¬ν•¨ν•˜κ³  μžˆλŠ” 볡합 데이터. each-of νƒ€μž…μ΄λΌκ³ λ„ λΆˆλ¦°λ‹€.

νŠœν”Œμ΄λ‚˜, 클래슀 λ‚΄λΆ€μ˜ ν•„λ“œ 등이 해당됨.

type x0 = {f1 = e1, ..., fn = en}
{foo : int, bar: int*bool, baz: bool*int}

λ‚΄λΆ€ μˆœμ„œλŠ” κ΄€κ³„μ—†μœΌλ©°, νŠœν”Œμ€ μΌμ’…μ˜ μˆœμ„œλ₯Ό ν‚€λ‘œ ν•˜λŠ” λ ˆμ½”λ“œμ΄λ‹€.

#f1 x0 = e1

μœ„μ™€ 같이 # ν‚€μ›Œλ“œλ₯Ό 톡해 값에 μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€.

date type (sum-type)

n개의 νƒ€μž… 쀑 ν•˜λ‚˜μΈ 볡합 데이터. one-of νƒ€μž…μ΄λΌκ³ λ„ λΆˆλ¦°λ‹€.

enum, 리슀트, option 등이 해당됨.

datatype x0 = c0 of t0 | c1 |...| cn of tn

datatype mytype = TwoInts of int * int
| Str of string
| Pizza

c0, cn 은 μƒμ„±μžλ‘œ, t0 νƒ€μž…μ„ x0 νƒ€μž…μœΌλ‘œ λ°”κΏ” μ€€λ‹€. TwoInts(3,4)λŠ” mytype으둜 바뀐닀.

fun f (x: mytype) =
	case x of
		Pizza => 3
		| TwoInts(i1, i2) => i1 + i2
		| Str s => String.size s

μœ„μ™€ 같이 caseλ₯Ό 톡해 μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€.
option λ˜ν•œ μœ„μ™€ 같이 μ ‘κ·Ό κ°€λŠ₯ν•˜λ©°, 기쑴의 null, valOf 보닀 ꢌμž₯ν•œλ‹€.

μž¬κ·€ν˜• νƒ€μž… μ˜ˆμ‹œ

datatype exp = Constant of int
	| Negate of exp
	| Add of exp * exp
	| Multiply of exp * exp
	
fun eval e = 
	case e of Constant i => 
		i 
		| Negate e2 => ~ (eval e2) 
		| Add(e1,e2) => (eval e1) + (eval e2) 
		| Multiply(e1,e2) => (eval e1) * (eval e2)

λ‹€ν˜• νƒ€μž…(Polymorphic type) ν˜Ήμ€ 일반 νƒ€μž…(Generic)

λ‹€μŒκ³Ό 같이 λ‹€μ–‘ν•œ κ²°κ³Όκ°’μ˜ μžλ£Œν˜•μ΄ λ‚˜μ˜¬ 수 μžˆλŠ” κ²½μš°μ—λŠ” λ‹€ν˜• νƒ€μž…,(μΌλ°˜ν˜• νƒ€μž…)이 μ΄μš©λœλ‹€.

이듀을 톡해 μž¬μ‚¬μš©μ„± 높은 ν•¨μˆ˜λ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

fun justfun x =
	if true then x else x

xλŠ” μ–΄λ– ν•œ 값이 λ“€μ–΄κ°ˆ 수 있고 μ–΄λ– ν•œ 값이 λ‚˜μ˜¬ 수 μžˆλ‹€.
이λ₯Ό smlμ—μ„œλŠ” a'->a'둜 ν‘œν˜„ν•œλ‹€.

같은 λ‹€ν˜• νƒ€μž…μΈλ° μ„œλ‘œ μžλ£Œν˜•μ΄ κ°™κ±°λ‚˜ 달라도 λ˜λŠ” 경우, 예λ₯Ό 경우 λ‹€μŒμ˜ κ²½μš°λŠ” (a'*b'*b') -> b'둜 ν‘œκΈ°λœλ‹€.

fun justfun2 (x, y, z) =
	if x then y else z

λ§κ·ΈλŒ€λ‘œ a', b'λŠ” int, string, list λ“± μ—¬λŸ¬ 값이 λ“€μ–΄ 갈 수 있으며, μ‚¬μš©μž μ •μ˜ μžλ£Œν˜•λ„ κ°€λŠ₯ν•˜λ‹€.