lambda calculus ! 람다에 기반한 프로그래밍 언어dreameye/pl/slide/pl8.pdf · 2011. 4....
TRANSCRIPT
람다에 기반한 프로그래밍 언어
5.1 !"! !! 125
! "!. ! !!# "$!%! "!! "!# #! !!! #& "%! !"
". #"' “Turing-Church Thesis”"! !"!.
# " "$# !! !!!Lambda Calculus# !"! !!' $!! "!. !
!syntax# "! !"!!semantics$ "!.
5.1.1 !! !!!Lambda Calculus
!! !!!Lambda Calculus#"" !"# !!! "!"#! !"# !$(#
$" ""$!. " !"! !!## !#$! ""#!. !%!%! %"$
#!!""# (!"!!#$"""!""!"$#)"!"!"!)$
#""#"!%&!!"%$. #$'!%%&#!%!(%"!!""
' !!% " "" !"# “Turing-complete $!”! !!.
'%!!! !!!Lambda Calculus'!"#&%!(%! “!!”"!!!
)!.
!!! !!!"syntax" (%$!:
Exp E ! x variable
| !x.E abstraction
| E E application
x" #&#!. !x.E" &"# &!!. x" &"! ($! E" &"! #"
#!. x!*"#+" E#!. !x.E" E$!!!" x# “#!bind#!”!!
!. E1 E2" &"# !"$" ##!. E1& %"$" &" !x.E$ #($!
E2" " &"! ($ x! $!$ $!.
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
함수정의
함수적용
•프로그램에서 함수는 최종 값
•몸통의 실행은 호출될 때
1 + 2 + 3 → 3 + 3 → 6
(λx.x)(λy.y z) → (λy.y z)→ z(λx.x)(λy.y z) → (λx.x) z → z
(λx.x) y → y
(λx.x(λx.x))(u r) → u r (λx.x)
(λx.y)(λz.z) → y
(λx.(λy.y x) z)(z w) → (λy.y (z w)) z→ z (z w)
(λx.x x)(λx.x x) → (λx.x x)(λx.x x)→ · · ·
(λx.y)((λx.x x)(λx.x x)) → y
(λx.y)((λx.x x)(λx.x x)) → (λx.y)(λx.x x)(λx.x x)→ · · ·
λx.x (λx.x (λz.(λx.x) z))→ λx.x (λz.(λx.x) z))→ λz.(λx.x) z→ λz.z
λx.x (λx.x (λz.(λx.x) z))→ λx.x (λz.(λx.x) z))→ λz.(λx.x) z
[] x [] λx.(x []) (λx.x y)(y []) (λx. []) []
C[] = (λz.z [])C[(λx.x y)] = (λz.z [λx.x y])
{x �→ y, y �→ z} x y �= z z= y z
{x �→ y} λx.x �= λx.y= λz.{x �→ y}{x �→ z}x= λz.z
{y �→ x}λx.y �= λx.x= λz.{y �→ x){x �→ z}y= λz.x
x y zλx.x λx.y λx.λy.x
x y λx.y z x λy.z λx.x y
t → terms| x variable| λx.t abstraction| t t application
3
136 ! !!! !"
#! !! ! !x.E! !! !canonical term"!" !"!.
$#! !! !canonical term" !"!! !! v(“value”)! !!!#!.
5.2.1 !!!! !!lazy evaluation! !!!! !!eager evaluation
""!!! ##" $!! !"!. ""$ !"" ! "! %!. ##! "!
% ! ##$ !"! !# !!" ""! !"!.
!"" ##$ !"! ! E1 E2, &$ $ E2% !" ""% #!! $"?
"$" #!" '!. (# "!) ""!!! &$ !" &!$ !# &$ $
) ""!!. "%, "!) ""!! $# &$ $) ""%! &$ !) "'
## "!) ""!!.
" !# %"! !!!! "!lazy evaluation, normal-order evaluation "% !"
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
소극적인/적극적인 실행(lazy/eager evaluation)
•인자식을 계산하는 시점에 따라
•소극적(lazy): 함수몸통을 실행하면서 필요할 때에
•call-by-name, call-by-need
•ex) Haskell
•적극적(eager): 몸통 실행전에 먼저
•call-by-value
•ex) ML
λx.E
E1 E2
S = {x1 �→ Y1, . . . , xn �→ Yn}S E
• N = {0} ∪ {n + 1 | n ∈ N}N = fixλX.{0} ∪ {n + 1 | n ∈ X}
• fac(n) = if n=0 1 else n*fac(n-1)fac = fixλf.(λn.if n = 0 1 else n× f(n− 1))
• Y = λf.(λx.f(xx))(λx.f(xx))
• fac = Y (λf.(λn.if n = 0 1 else n× f(n− 1)))
true �= λt.λf.t
false �= λt.λf.f
if e1 e2 e3�= e1 e2 e3
and �= λb.λc.b c falseor �= ?
not �= ?if true true false
and true true
and true false
0 �= λs.λz.z
1 �= λs.λz.s z
2 �= λs.λz.s (s z)n
�= λs.λz.sn z
succ �= λn.λs.λz.s (n s z)add �= λm.λn.λs.λz.m s (n s z)
mult �= λm.λn.m (add n) 0iszero �= λm.m (λx.false) true
1
소극적인/적극적인 실행(lazy/eager evaluation)138 ! !!! !"
!!" #! !#$ "!!" %".
lazy evaluation eager evaluation
!x.E !N !x.E !x.E !E !x.E
E1 !N !x.E {x "# E2}E !N vE1 E2 !N v
E1 !E !x.E E2 !E v {x "# v}E !N v!
E1 E2 !E v!
!!!&""#!!!&""'(#""%". !!!)!""!!!
!!& $!!" !! %!!! $!& %", " "!! $!" %". $!"
!!!)! ""!!
(!x.7)((!x.x x)(!x.x x)) !N 7
""#, !!!)! ""!! "#! #".
(!x.7)((!x.x x)(!x.x x))
!E (!x.7)((!x.x x)(!x.x x))
!E
...
#!, $!" !!!)! ""!!
(!x.(x · · ·x))E !N (E · · ·E) !N · · ·
E" " # ""$% !'"#, !!!)! ""!! ### ""!! #".
(!x.(x · · · x))E !"E (!x.(x · · · x))v !E (v · · · v) !E · · · .
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
lazy evaluation eager evaluation
장단점
•소극적인 실행이 빨리 끝나는 경우
138 ! !!! !"
!!" #! !#$ "!!" %".
lazy evaluation eager evaluation
!x.E !N !x.E !x.E !E !x.E
E1 !N !x.E {x "# E2}E !N vE1 E2 !N v
E1 !E !x.E E2 !E v {x "# v}E !N v!
E1 E2 !E v!
!!!&""#!!!&""'(#""%". !!!)!""!!!
!!& $!!" !! %!!! $!& %", " "!! $!" %". $!"
!!!)! ""!!
(!x.7)((!x.x x)(!x.x x)) !N 7
""#, !!!)! ""!! "#! #".
(!x.7)((!x.x x)(!x.x x))
!E (!x.7)((!x.x x)(!x.x x))
!E
...
#!, $!" !!!)! ""!!
(!x.(x · · ·x))E !N (E · · ·E) !N · · ·
E" " # ""$% !'"#, !!!)! ""!! ### ""!! #".
(!x.(x · · · x))E !"E (!x.(x · · · x))v !E (v · · · v) !E · · · .
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
138 ! !!! !"
!!" #! !#$ "!!" %".
lazy evaluation eager evaluation
!x.E !N !x.E !x.E !E !x.E
E1 !N !x.E {x "# E2}E !N vE1 E2 !N v
E1 !E !x.E E2 !E v {x "# v}E !N v!
E1 E2 !E v!
!!!&""#!!!&""'(#""%". !!!)!""!!!
!!& $!!" !! %!!! $!& %", " "!! $!" %". $!"
!!!)! ""!!
(!x.7)((!x.x x)(!x.x x)) !N 7
""#, !!!)! ""!! "#! #".
(!x.7)((!x.x x)(!x.x x))
!E (!x.7)((!x.x x)(!x.x x))
!E
...
#!, $!" !!!)! ""!!
(!x.(x · · ·x))E !N (E · · ·E) !N · · ·
E" " # ""$% !'"#, !!!)! ""!! ### ""!! #".
(!x.(x · · · x))E !"E (!x.(x · · · x))v !E (v · · · v) !E · · · .
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
138 ! !!! !"
!!" #! !#$ "!!" %".
lazy evaluation eager evaluation
!x.E !N !x.E !x.E !E !x.E
E1 !N !x.E {x "# E2}E !N vE1 E2 !N v
E1 !E !x.E E2 !E v {x "# v}E !N v!
E1 E2 !E v!
!!!&""#!!!&""'(#""%". !!!)!""!!!
!!& $!!" !! %!!! $!& %", " "!! $!" %". $!"
!!!)! ""!!
(!x.7)((!x.x x)(!x.x x)) !N 7
""#, !!!)! ""!! "#! #".
(!x.7)((!x.x x)(!x.x x))
!E (!x.7)((!x.x x)(!x.x x))
!E
...
#!, $!" !!!)! ""!!
(!x.(x · · ·x))E !N (E · · ·E) !N · · ·
E" " # ""$% !'"#, !!!)! ""!! ### ""!! #".
(!x.(x · · · x))E !"E (!x.(x · · · x))v !E (v · · · v) !E · · · .
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
•적극적인 실행이 빠른 경우
138 ! !!! !"
!!" #! !#$ "!!" %".
lazy evaluation eager evaluation
!x.E !N !x.E !x.E !E !x.E
E1 !N !x.E {x "# E2}E !N vE1 E2 !N v
E1 !E !x.E E2 !E v {x "# v}E !N v!
E1 E2 !E v!
!!!&""#!!!&""'(#""%". !!!)!""!!!
!!& $!!" !! %!!! $!& %", " "!! $!" %". $!"
!!!)! ""!!
(!x.7)((!x.x x)(!x.x x)) !N 7
""#, !!!)! ""!! "#! #".
(!x.7)((!x.x x)(!x.x x))
!E (!x.7)((!x.x x)(!x.x x))
!E
...
#!, $!" !!!)! ""!!
(!x.(x · · ·x))E !N (E · · ·E) !N · · ·
E" " # ""$% !'"#, !!!)! ""!! ### ""!! #".
(!x.(x · · · x))E !"E (!x.(x · · · x))v !E (v · · · v) !E · · · .
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
시작언어: 문법5.2 !" !!! 0: M0 139
5.2.2 !! !": !" !! !"
!! !"! !!"! !#!$.
E ! x variable
| !x.E function
| E E application
% !"#! %! !& " '" !( " !%!. %!& “""”"# !$. "
" x! !!!"scope" ! %!& "( "" !x.E! !! E%!. $ ""%
## "& #!" !", ! """ "( ""% !!! ! !#"" )$ "%
! ""% #!" "% #!.
!$"!" #!!$ "$!" ""!!! $""! "!!$. !&"%
!"! !$"#" "!$& !" '( $"*%!. & E! !$ !$
" " E # v
( #( "#! & E" " v" &!%!, " #%!.
"!environment( ""% #!" "& )"& #!. !$"!#! #(&
"!%!"%+", #!!$&&"(!!!$!!!%!. """!!!
#!!$# !%'"!. #!'% #!!$ %!% "$!#! &% ""!
#!!!" $&% %&!.
"( """ ""!%!. "" "& !!!closure"# !"", "" !x.E
"$! $!" ! !!" "#! !static scoping! #(%!. #(! &'(
!x.E#! $+!$ ""$! "& )"&#!.
" $ Env = Idfin
! Val
v $ Val = Closure
%!x.E,"& $ Closure = Exp ' Env
!$ #!$( !,* '!. #"#$ ""eager evaluation #!& %$!.
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
의미정의
•프로그램 텍스트를 변화시키지 않으면서 정의
•의미판단 (judgement)
5.2 !" !!! 0: M0 139
5.2.2 !! !": !" !! !"
!! !"! !!"! !#!$.
E ! x variable
| !x.E function
| E E application
% !"#! %! !& " '" !( " !%!. %!& “""”"# !$. "
" x! !!!"scope" ! %!& "( "" !x.E! !! E%!. $ ""%
## "& #!" !", ! """ "( ""% !!! ! !#"" )$ "%
! ""% #!" "% #!.
!$"!" #!!$ "$!" ""!!! $""! "!!$. !&"%
!"! !$"#" "!$& !" '( $"*%!. & E! !$ !$
" " E # v
( #( "#! & E" " v" &!%!, " #%!.
"!environment( ""% #!" "& )"& #!. !$"!#! #(&
"!%!"%+", #!!$&&"(!!!$!!!%!. """!!!
#!!$# !%'"!. #!'% #!!$ %!% "$!#! &% ""!
#!!!" $&% %&!.
"( """ ""!%!. "" "& !!!closure"# !"", "" !x.E
"$! $!" ! !!" "#! !static scoping! #(%!. #(! &'(
!x.E#! $+!$ ""$! "& )"&#!.
" $ Env = Idfin
! Val
v $ Val = Closure
%!x.E,"& $ Closure = Exp ' Env
!$ #!$( !,* '!. #"#$ ""eager evaluation #!& %$!.
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
•환경 (environment)
•변수가 뜻하는 바를 결정
•프로그램식을 변경시키지 않기 위해 필요
5.2 !" !!! 0: M0 139
5.2.2 !! !": !" !! !"
!! !"! !!"! !#!$.
E ! x variable
| !x.E function
| E E application
% !"#! %! !& " '" !( " !%!. %!& “""”"# !$. "
" x! !!!"scope" ! %!& "( "" !x.E! !! E%!. $ ""%
## "& #!" !", ! """ "( ""% !!! ! !#"" )$ "%
! ""% #!" "% #!.
!$"!" #!!$ "$!" ""!!! $""! "!!$. !&"%
!"! !$"#" "!$& !" '( $"*%!. & E! !$ !$
" " E # v
( #( "#! & E" " v" &!%!, " #%!.
"!environment( ""% #!" "& )"& #!. !$"!#! #(&
"!%!"%+", #!!$&&"(!!!$!!!%!. """!!!
#!!$# !%'"!. #!'% #!!$ %!% "$!#! &% ""!
#!!!" $&% %&!.
"( """ ""!%!. "" "& !!!closure"# !"", "" !x.E
"$! $!" ! !!" "#! !static scoping! #(%!. #(! &'(
!x.E#! $+!$ ""$! "& )"&#!.
" $ Env = Idfin
! Val
v $ Val = Closure
%!x.E,"& $ Closure = Exp ' Env
!$ #!$( !,* '!. #"#$ ""eager evaluation #!& %$!.
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
5.2 !" !!! 0: M0 139
5.2.2 !! !": !" !! !"
!! !"! !!"! !#!$.
E ! x variable
| !x.E function
| E E application
% !"#! %! !& " '" !( " !%!. %!& “""”"# !$. "
" x! !!!"scope" ! %!& "( "" !x.E! !! E%!. $ ""%
## "& #!" !", ! """ "( ""% !!! ! !#"" )$ "%
! ""% #!" "% #!.
!$"!" #!!$ "$!" ""!!! $""! "!!$. !&"%
!"! !$"#" "!$& !" '( $"*%!. & E! !$ !$
" " E # v
( #( "#! & E" " v" &!%!, " #%!.
"!environment( ""% #!" "& )"& #!. !$"!#! #(&
"!%!"%+", #!!$&&"(!!!$!!!%!. """!!!
#!!$# !%'"!. #!'% #!!$ %!% "$!#! &% ""!
#!!!" $&% %&!.
"( """ ""!%!. "" "& !!!closure"# !"", "" !x.E
"$! $!" ! !!" "#! !static scoping! #(%!. #(! &'(
!x.E#! $+!$ ""$! "& )"&#!.
" $ Env = Idfin
! Val
v $ Val = Closure
%!x.E,"& $ Closure = Exp ' Env
!$ #!$( !,* '!. #"#$ ""eager evaluation #!& %$!.
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
값
•값 = 함수
•함수값 = 클로져 (closure)
•함수정의 + 정의될 때의 환경
•static scoping
5.2 !" !!! 0: M0 139
5.2.2 !! !": !" !! !"
!! !"! !!"! !#!$.
E ! x variable
| !x.E function
| E E application
% !"#! %! !& " '" !( " !%!. %!& “""”"# !$. "
" x! !!!"scope" ! %!& "( "" !x.E! !! E%!. $ ""%
## "& #!" !", ! """ "( ""% !!! ! !#"" )$ "%
! ""% #!" "% #!.
!$"!" #!!$ "$!" ""!!! $""! "!!$. !&"%
!"! !$"#" "!$& !" '( $"*%!. & E! !$ !$
" " E # v
( #( "#! & E" " v" &!%!, " #%!.
"!environment( ""% #!" "& )"& #!. !$"!#! #(&
"!%!"%+", #!!$&&"(!!!$!!!%!. """!!!
#!!$# !%'"!. #!'% #!!$ %!% "$!#! &% ""!
#!!!" $&% %&!.
"( """ ""!%!. "" "& !!!closure"# !"", "" !x.E
"$! $!" ! !!" "#! !static scoping! #(%!. #(! &'(
!x.E#! $+!$ ""$! "& )"&#!.
" $ Env = Idfin
! Val
v $ Val = Closure
%!x.E,"& $ Closure = Exp ' Env
!$ #!$( !,* '!. #"#$ ""eager evaluation #!& %$!.
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
let y = 1 inlet f = \x.x+y inlet y = 2 in (f 1)
의미규칙140 ! !!! !"
! ! E " v!(x) = v! ! x " v
! ! "x.E " #"x.E,!$
! ! E1 " #"x.E,!!$ ! ! E2 " v !!{x %& v} ! E " v!
! ! E1 E2 " v!
5.3 !" !!! I: M1
M0! ""# !! !!!!" # " #"" !!"!. M0# $%! $"$
!# !!!!syntactic sugar"", !!!"!! !!! %# !""&.
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
dynamic scoping?σ � λx.E ⇒ λx.E
σ � E1 ⇒ λx.E� σ � E2 ⇒ v σ{x �→ v} � E� ⇒ v�
σ � E1 E2 ⇒ v�
λx.E
E1 E2
S = {x1 �→ Y1, . . . , xn �→ Yn}S E
• N = {0} ∪ {n + 1 | n ∈ N}N = fixλX.{0} ∪ {n + 1 | n ∈ X}
• fac(n) = if n=0 1 else n*fac(n-1)fac = fixλf.(λn.if n = 0 1 else n× f(n− 1))
• Y = λf.(λx.f(xx))(λx.f(xx))
• Y F = F (Y F )Y F
β= (λx.F (xx))(λx.F (xx)) β= F ((λx.F (xx))(λx.F (xx))) = f(Y f)
• fac = Y (λf.(λn.if n = 0 1 else n× f(n− 1)))
1
Examples140 ! !!! !"
! ! E " v!(x) = v! ! x " v
! ! "x.E " #"x.E,!$
! ! E1 " #"x.E,!!$ ! ! E2 " v !!{x %& v} ! E " v!
! ! E1 E2 " v!
5.3 !" !!! I: M1
M0! ""# !! !!!!" # " #"" !!"!. M0# $%! $"$
!# !!!!syntactic sugar"", !!!"!! !!! %# !""&.
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
σ � λx.z x ⇒ �λx.z x, σ� σ � λy.y ⇒ �λy.y,σ�
σ{x �→ �λy.y,σ�} � z ⇒ �λk.k, σ��σ{x �→ �λy.y,σ�} � x ⇒ �λy.y,σ�σ�{k �→ �λy.y,σ� � k ⇒ �λy.y,σ�}σ{x �→ �λy.y,σ�} � z x ⇒ �λy.y,σ�
σ(= {z �→ �λk.k, σ��}) � (λx.z x) (λy.y) ⇒ �λy.y,σ�
σ � λx.E ⇒ λx.E
σ � E1 ⇒ λx.E� σ � E2 ⇒ v σ{x �→ v} � E� ⇒ v�
σ � E1 E2 ⇒ v�
λx.E
E1 E2
S = {x1 �→ Y1, . . . , xn �→ Yn}S E
• N = {0} ∪ {n + 1 | n ∈ N}N = fixλX.{0} ∪ {n + 1 | n ∈ X}
• fac(n) = if n=0 1 else n*fac(n-1)fac = fixλf.(λn.if n = 0 1 else n× f(n− 1))
• Y = λf.(λx.f(xx))(λx.f(xx))
• Y F = F (Y F )Y F
β= (λx.F (xx))(λx.F (xx)) β= F ((λx.F (xx))(λx.F (xx))) = f(Y f)
• fac = Y (λf.(λn.if n = 0 1 else n× f(n− 1)))
1
σ � λx.x ⇒ �λx.x, σ� σ � 1 ⇒ 1 σ{x �→ 1} � x ⇒ 1σ � (λx.x) 1 ⇒ 1
σ � λx.z x ⇒ �λx.z x, σ� σ � λy.y ⇒ �λy.y,σ�
σ{x �→ �λy.y,σ�} � z ⇒ �λk.k, σ��σ{x �→ �λy.y,σ�} � x ⇒ �λy.y,σ�σ�{k �→ �λy.y,σ� � k ⇒ �λy.y,σ�}σ{x �→ �λy.y,σ�} � z x ⇒ �λy.y,σ�
σ(= {z �→ �λk.k, σ��}) � (λx.z x) (λy.y) ⇒ �λy.y,σ�
σ � λx.E ⇒ λx.E
σ � E1 ⇒ λx.E� σ � E2 ⇒ v σ{x �→ v} � E� ⇒ v�
σ � E1 E2 ⇒ v�
λx.E
E1 E2
S = {x1 �→ Y1, . . . , xn �→ Yn}S E
• N = {0} ∪ {n + 1 | n ∈ N}N = fixλX.{0} ∪ {n + 1 | n ∈ X}
• fac(n) = if n=0 1 else n*fac(n-1)fac = fixλf.(λn.if n = 0 1 else n× f(n− 1))
• Y = λf.(λx.f(xx))(λx.f(xx))
• Y F = F (Y F )Y F
β= (λx.F (xx))(λx.F (xx)) β= F ((λx.F (xx))(λx.F (xx))) = f(Y f)
• fac = Y (λf.(λn.if n = 0 1 else n× f(n− 1)))
1
언어키우기 I: M1
5.3 !" !!! I: M1 141
5.3.1 !! !: !!, !/"!
!!, !/!!, !!!! rec f !x.E, """ if E E E, "!# !!" E + E
$ "!" E =E. (!!$ "!! #!! !! %! !" "!# !" !" #
""&"" '"# !$# %$ !"##.)
E !...
| n integer
| true | false
| let x = E in E
| if E E E
| rec f !x.E
| E + E
| E = E
""& "$# !" M0!"! !!% ! '&(!, " )"! "#! #").
!!
let x = E1 in E2
" #*$ """#:
(!x.E2) E1
"# (#+ $ $$) '#: !!($ !! "!# !/!!.
v " Val = Closure + Z + B
z " Z the integer set
b " B = {true, false}
" " Env = Idfin
! Val
&!"#$ !$ "#+ (& *"##. $! #"#+
" # E $ v
" # n $ n
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
5.3 !" !!! I: M1 141
5.3.1 !! !: !!, !/"!
!!, !/!!, !!!! rec f !x.E, """ if E E E, "!# !!" E + E
$ "!" E =E. (!!$ "!! #!! !! %! !" "!# !" !" #
""&"" '"# !$# %$ !"##.)
E !...
| n integer
| true | false
| let x = E in E
| if E E E
| rec f !x.E
| E + E
| E = E
""& "$# !" M0!"! !!% ! '&(!, " )"! "#! #").
!!
let x = E1 in E2
" #*$ """#:
(!x.E2) E1
"# (#+ $ $$) '#: !!($ !! "!# !/!!.
v " Val = Closure + Z + B
z " Z the integer set
b " B = {true, false}
" " Env = Idfin
! Val
&!"#$ !$ "#+ (& *"##. $! #"#+
" # E $ v
" # n $ n
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
+정수, 참/거짓, let식, 재귀함수, 조건식,덧셈식,동치식
의미규칙
5.3 !" !!! I: M1 141
5.3.1 !! !: !!, !/"!
!!, !/!!, !!!! rec f !x.E, """ if E E E, "!# !!" E + E
$ "!" E =E. (!!$ "!! #!! !! %! !" "!# !" !" #
""&"" '"# !$# %$ !"##.)
E !...
| n integer
| true | false
| let x = E in E
| if E E E
| rec f !x.E
| E + E
| E = E
""& "$# !" M0!"! !!% ! '&(!, " )"! "#! #").
!!
let x = E1 in E2
" #*$ """#:
(!x.E2) E1
"# (#+ $ $$) '#: !!($ !! "!# !/!!.
v " Val = Closure + Z + B
z " Z the integer set
b " B = {true, false}
" " Env = Idfin
! Val
&!"#$ !$ "#+ (& *"##. $! #"#+
" # E $ v
" # n $ n
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
5.3 !" !!! I: M1 141
5.3.1 !! !: !!, !/"!
!!, !/!!, !!!! rec f !x.E, """ if E E E, "!# !!" E + E
$ "!" E =E. (!!$ "!! #!! !! %! !" "!# !" !" #
""&"" '"# !$# %$ !"##.)
E !...
| n integer
| true | false
| let x = E in E
| if E E E
| rec f !x.E
| E + E
| E = E
""& "$# !" M0!"! !!% ! '&(!, " )"! "#! #").
!!
let x = E1 in E2
" #*$ """#:
(!x.E2) E1
"# (#+ $ $$) '#: !!($ !! "!# !/!!.
v " Val = Closure + Z + B
z " Z the integer set
b " B = {true, false}
" " Env = Idfin
! Val
&!"#$ !$ "#+ (& *"##. $! #"#+
" # E $ v
" # n $ n
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
142 ! !!! !"
! ! true " true
! ! false " false
! ! E1 " v1 !{x #$ v1} ! E2 " v! ! let x = E1 in E2 " v
! ! E1 " true ! ! E2 " v! ! if E1 E2 E3 " v
! ! E1 " false ! ! E3 " v! ! if E1 E2 E3 " v
! ! rec f "x.E " %rec f "x.E,!&
! ! E1 " z1 ! ! E2 " z2
! ! E1 + E2 " z1 + z2
! ! E1 " v1 ! ! E2 " v2
! ! E1 = E2 " v1 = v2
!!" !"! !!#! !! "!# "#!"! #!$ ""#!.
! ! E1 " %rec f "x.E,!!& ! ! E2 " v !!{f #$ %rec f "x.E,!!&}{x #$ v} ! E " v!
! ! E1 E2 " v!
z1 + z2" !"#! !!! !"#!. v1 = v2" ""$" $#"" %!$!.
#! vi"% !# !"&! !/&# !#"% $!. !" !"$ #! """
!$% " &!. &!"'! # !"" "" '% $(# #&! '% ()"
'""!"!"$""!%"'!!$!$%#!. $%#!"!*)#
#&!!!!!!Halting Problem"!"(!!!)!!%"*!!"#!.
5.4 !" !!! II: M2
5.4.1 !!! !! ": !pair
$#"$$$#!"(!!!#!$+#(. !)#""###"##)
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
의미규칙
142 ! !!! !"
! ! true " true
! ! false " false
! ! E1 " v1 !{x #$ v1} ! E2 " v! ! let x = E1 in E2 " v
! ! E1 " true ! ! E2 " v! ! if E1 E2 E3 " v
! ! E1 " false ! ! E3 " v! ! if E1 E2 E3 " v
! ! rec f "x.E " %rec f "x.E,!&
! ! E1 " z1 ! ! E2 " z2
! ! E1 + E2 " z1 + z2
! ! E1 " v1 ! ! E2 " v2
! ! E1 = E2 " v1 = v2
!!" !"! !!#! !! "!# "#!"! #!$ ""#!.
! ! E1 " %rec f "x.E,!!& ! ! E2 " v !!{f #$ %rec f "x.E,!!&}{x #$ v} ! E " v!
! ! E1 E2 " v!
z1 + z2" !"#! !!! !"#!. v1 = v2" ""$" $#"" %!$!.
#! vi"% !# !"&! !/&# !#"% $!. !" !"$ #! """
!$% " &!. &!"'! # !"" "" '% $(# #&! '% ()"
'""!"!"$""!%"'!!$!$%#!. $%#!"!*)#
#&!!!!!!Halting Problem"!"(!!!)!!%"*!!"#!.
5.4 !" !!! II: M2
5.4.1 !!! !! ": !pair
$#"$$$#!"(!!!#!$+#(. !)#""###"##)
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
142 ! !!! !"
! ! true " true
! ! false " false
! ! E1 " v1 !{x #$ v1} ! E2 " v! ! let x = E1 in E2 " v
! ! E1 " true ! ! E2 " v! ! if E1 E2 E3 " v
! ! E1 " false ! ! E3 " v! ! if E1 E2 E3 " v
! ! rec f "x.E " %rec f "x.E,!&
! ! E1 " z1 ! ! E2 " z2
! ! E1 + E2 " z1 + z2
! ! E1 " v1 ! ! E2 " v2
! ! E1 = E2 " v1 = v2
!!" !"! !!#! !! "!# "#!"! #!$ ""#!.
! ! E1 " %rec f "x.E,!!& ! ! E2 " v !!{f #$ %rec f "x.E,!!&}{x #$ v} ! E " v!
! ! E1 E2 " v!
z1 + z2" !"#! !!! !"#!. v1 = v2" ""$" $#"" %!$!.
#! vi"% !# !"&! !/&# !#"% $!. !" !"$ #! """
!$% " &!. &!"'! # !"" "" '% $(# #&! '% ()"
'""!"!"$""!%"'!!$!$%#!. $%#!"!*)#
#&!!!!!!Halting Problem"!"(!!!)!!%"*!!"#!.
5.4 !" !!! II: M2
5.4.1 !!! !! ": !pair
$#"$$$#!"(!!!#!$+#(. !)#""###"##)
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
Examples
σ � 1 ⇒ 1· · ·
σ{x �→ 1} � x + 2 ⇒ 3σ � let x = 1 in x + 2 ⇒ 3
σ � λx.x ⇒ �λx.x, σ� σ � 1 ⇒ 1 σ{x �→ 1} � x ⇒ 1σ � (λx.x) 1 ⇒ 1
σ � λx.z x ⇒ �λx.z x, σ� σ � λy.y ⇒ �λy.y,σ�
σ{x �→ �λy.y,σ�} � z ⇒ �λk.k, σ��σ{x �→ �λy.y,σ�} � x ⇒ �λy.y,σ�σ�{k �→ �λy.y,σ� � k ⇒ �λy.y,σ�}σ{x �→ �λy.y,σ�} � z x ⇒ �λy.y,σ�
σ(= {z �→ �λk.k, σ��}) � (λx.z x) (λy.y) ⇒ �λy.y,σ�
σ � λx.E ⇒ λx.E
σ � E1 ⇒ λx.E� σ � E2 ⇒ v σ{x �→ v} � E� ⇒ v�
σ � E1 E2 ⇒ v�
λx.E
E1 E2
S = {x1 �→ Y1, . . . , xn �→ Yn}S E
• N = {0} ∪ {n + 1 | n ∈ N}N = fixλX.{0} ∪ {n + 1 | n ∈ X}
• fac(n) = if n=0 1 else n*fac(n-1)fac = fixλf.(λn.if n = 0 1 else n× f(n− 1))
• Y = λf.(λx.f(xx))(λx.f(xx))
• Y F = F (Y F )Y F
β= (λx.F (xx))(λx.F (xx)) β= F ((λx.F (xx))(λx.F (xx))) = f(Y f)
• fac = Y (λf.(λn.if n = 0 1 else n× f(n− 1)))
1
· · ·let fac = rec f λn.if n = 0 then 1 else n ∗ (f (n− 1)) in (fac 2)
σ � 1 ⇒ 1· · ·
σ{x �→ 1} � x + 2 ⇒ 3σ � let x = 1 in x + 2 ⇒ 3
σ � λx.x ⇒ �λx.x, σ� σ � 1 ⇒ 1 σ{x �→ 1} � x ⇒ 1σ � (λx.x) 1 ⇒ 1
σ � λx.z x ⇒ �λx.z x, σ� σ � λy.y ⇒ �λy.y,σ�
σ{x �→ �λy.y,σ�} � z ⇒ �λk.k, σ��σ{x �→ �λy.y,σ�} � x ⇒ �λy.y,σ�σ�{k �→ �λy.y,σ� � k ⇒ �λy.y,σ�}σ{x �→ �λy.y,σ�} � z x ⇒ �λy.y,σ�
σ(= {z �→ �λk.k, σ��}) � (λx.z x) (λy.y) ⇒ �λy.y,σ�
σ � λx.E ⇒ λx.E
σ � E1 ⇒ λx.E� σ � E2 ⇒ v σ{x �→ v} � E� ⇒ v�
σ � E1 E2 ⇒ v�
λx.E
E1 E2
S = {x1 �→ Y1, . . . , xn �→ Yn}S E
• N = {0} ∪ {n + 1 | n ∈ N}N = fixλX.{0} ∪ {n + 1 | n ∈ X}
• fac(n) = if n=0 1 else n*fac(n-1)fac = fixλf.(λn.if n = 0 1 else n× f(n− 1))
• Y = λf.(λx.f(xx))(λx.f(xx))
• Y F = F (Y F )Y F
β= (λx.F (xx))(λx.F (xx)) β= F ((λx.F (xx))(λx.F (xx))) = f(Y f)
• fac = Y (λf.(λn.if n = 0 1 else n× f(n− 1)))
1
언어키우기 II: M25.4 !" !!! II: M2 143
!!!!. ""!! !""!! !#!!.
E !...
| (E,E)
| E.1
| E.2
"! $!# "#! ""# $!: "!$, #!, "/%", !# " $% !.
v " Val = Closure + Z + B + Pair
#v, v!$ " Pair = Val % Val
! " Env = Idfin
! Val
(&", '% Val ##%#%# "!!!. Val"!! !"( #!& #%##
!: Val = · · ·Val % Val . !! ## Val# !! $)$!. !##! $". #
!"# X = Xfin
! X# !%!# !##" $" ## X! $)$!.)
%""!# !*" !#$!.
! & E ' v! & E1 ' v1 ! & E2 ' v2
! & (E1,E2) ' #v1, v2$
! & E ' #v1, v2$! & E.1 ' v1
! & E ' #v1, v2$! & E.2 ' v2
!( !!& ! ! $!" !# '% "!# !" !""!. "!' !+
!$(#? "!'(#+(!#%#!"( M0#!&!!!$(#? !
* #% E "# E# !+ ! $!:
(E1,E2) = "m.(m E1) E2
E.1 = E("x."y.x)
E.2 = E("x."y.y)
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
5.4 !" !!! II: M2 143
!!!!. ""!! !""!! !#!!.
E !...
| (E,E)
| E.1
| E.2
"! $!# "#! ""# $!: "!$, #!, "/%", !# " $% !.
v " Val = Closure + Z + B + Pair
#v, v!$ " Pair = Val % Val
! " Env = Idfin
! Val
(&", '% Val ##%#%# "!!!. Val"!! !"( #!& #%##
!: Val = · · ·Val % Val . !! ## Val# !! $)$!. !##! $". #
!"# X = Xfin
! X# !%!# !##" $" ## X! $)$!.)
%""!# !*" !#$!.
! & E ' v! & E1 ' v1 ! & E2 ' v2
! & (E1,E2) ' #v1, v2$
! & E ' #v1, v2$! & E.1 ' v1
! & E ' #v1, v2$! & E.2 ' v2
!( !!& ! ! $!" !# '% "!# !" !""!. "!' !+
!$(#? "!'(#+(!#%#!"( M0#!&!!!$(#? !
* #% E "# E# !+ ! $!:
(E1,E2) = "m.(m E1) E2
E.1 = E("x."y.x)
E.2 = E("x."y.y)
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
5.4 !" !!! II: M2 143
!!!!. ""!! !""!! !#!!.
E !...
| (E,E)
| E.1
| E.2
"! $!# "#! ""# $!: "!$, #!, "/%", !# " $% !.
v " Val = Closure + Z + B + Pair
#v, v!$ " Pair = Val % Val
! " Env = Idfin
! Val
(&", '% Val ##%#%# "!!!. Val"!! !"( #!& #%##
!: Val = · · ·Val % Val . !! ## Val# !! $)$!. !##! $". #
!"# X = Xfin
! X# !%!# !##" $" ## X! $)$!.)
%""!# !*" !#$!.
! & E ' v! & E1 ' v1 ! & E2 ' v2
! & (E1,E2) ' #v1, v2$
! & E ' #v1, v2$! & E.1 ' v1
! & E ' #v1, v2$! & E.2 ' v2
!( !!& ! ! $!" !# '% "!# !" !""!. "!' !+
!$(#? "!'(#+(!#%#!"( M0#!&!!!$(#? !
* #% E "# E# !+ ! $!:
(E1,E2) = "m.(m E1) E2
E.1 = E("x."y.x)
E.2 = E("x."y.y)
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
예) 리스트 구현
만드는 방법
사용하는 방법
144 ! !!! !"
!!"#!$!!!!!%!!""!. "#!!!!!""",!"!
!! !!! " "", "!"! !!! " "", #"! !&!! !!! " "
!.
Example 26 !# !", "#!# !!$ !'. "! "#!"! " #"!
"#! !! " "!: " "#!" "#! #$ %! " !% !!# "#!
# !#" "#. & " $# %% nil& link"" %'. nil( 0#! "!%
'. ("#!! $!! 0& "%$" &"!" #"&!). link"!)! #"
! "!%':
!x.!lst.(x,lst)
"#! “link 1 nil” ( 1 %! "" "#! [1]#, “link 1 (link 2 nil)”(
[1, 2]* "#!# !%!.
"%%" "##!" "#!# #""" " !#%" "# isNil?& "#
!!!)$!"!""$!#'#%"#"! head" tail!"#!&!.
!)& (& %% "!%! &!.
isNil? head tail
!lst.(lst = nil) !lst.(lst.1) !lst.(lst.2)
!
Example 27 !!$!!,! !! !!!!binary tree#!!$!'. !#"
"#("#": empty, leaf, node. "%%""#("#": isEmpty?, left,
right. !)& (& "!! " "!.
empty leaf node
0 !x.x !lt.!rt.(link lt rt)
isEmpty? left right
!t.(t = empty) !t.(t.1) !t.(t.2)
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
144 ! !!! !"
!!"#!$!!!!!%!!""!. "#!!!!!""",!"!
!! !!! " "", "!"! !!! " "", #"! !&!! !!! " "
!.
Example 26 !# !", "#!# !!$ !'. "! "#!"! " #"!
"#! !! " "!: " "#!" "#! #$ %! " !% !!# "#!
# !#" "#. & " $# %% nil& link"" %'. nil( 0#! "!%
'. ("#!! $!! 0& "%$" &"!" #"&!). link"!)! #"
! "!%':
!x.!lst.(x,lst)
"#! “link 1 nil” ( 1 %! "" "#! [1]#, “link 1 (link 2 nil)”(
[1, 2]* "#!# !%!.
"%%" "##!" "#!# #""" " !#%" "# isNil?& "#
!!!)$!"!""$!#'#%"#"! head" tail!"#!&!.
!)& (& %% "!%! &!.
isNil? head tail
!lst.(lst = nil) !lst.(lst.1) !lst.(lst.2)
!
Example 27 !!$!!,! !! !!!!binary tree#!!$!'. !#"
"#("#": empty, leaf, node. "%%""#("#": isEmpty?, left,
right. !)& (& "!! " "!.
empty leaf node
0 !x.x !lt.!rt.(link lt rt)
isEmpty? left right
!t.(t = empty) !t.(t.1) !t.(t.2)
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
144 ! !!! !"
!!"#!$!!!!!%!!""!. "#!!!!!""",!"!
!! !!! " "", "!"! !!! " "", #"! !&!! !!! " "
!.
Example 26 !# !", "#!# !!$ !'. "! "#!"! " #"!
"#! !! " "!: " "#!" "#! #$ %! " !% !!# "#!
# !#" "#. & " $# %% nil& link"" %'. nil( 0#! "!%
'. ("#!! $!! 0& "%$" &"!" #"&!). link"!)! #"
! "!%':
!x.!lst.(x,lst)
"#! “link 1 nil” ( 1 %! "" "#! [1]#, “link 1 (link 2 nil)”(
[1, 2]* "#!# !%!.
"%%" "##!" "#!# #""" " !#%" "# isNil?& "#
!!!)$!"!""$!#'#%"#"! head" tail!"#!&!.
!)& (& %% "!%! &!.
isNil? head tail
!lst.(lst = nil) !lst.(lst.1) !lst.(lst.2)
!
Example 27 !!$!!,! !! !!!!binary tree#!!$!'. !#"
"#("#": empty, leaf, node. "%%""#("#": isEmpty?, left,
right. !)& (& "!! " "!.
empty leaf node
0 !x.x !lt.!rt.(link lt rt)
isEmpty? left right
!t.(t = empty) !t.(t.1) !t.(t.2)
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
144 ! !!! !"
!!"#!$!!!!!%!!""!. "#!!!!!""",!"!
!! !!! " "", "!"! !!! " "", #"! !&!! !!! " "
!.
Example 26 !# !", "#!# !!$ !'. "! "#!"! " #"!
"#! !! " "!: " "#!" "#! #$ %! " !% !!# "#!
# !#" "#. & " $# %% nil& link"" %'. nil( 0#! "!%
'. ("#!! $!! 0& "%$" &"!" #"&!). link"!)! #"
! "!%':
!x.!lst.(x,lst)
"#! “link 1 nil” ( 1 %! "" "#! [1]#, “link 1 (link 2 nil)”(
[1, 2]* "#!# !%!.
"%%" "##!" "#!# #""" " !#%" "# isNil?& "#
!!!)$!"!""$!#'#%"#"! head" tail!"#!&!.
!)& (& %% "!%! &!.
isNil? head tail
!lst.(lst = nil) !lst.(lst.1) !lst.(lst.2)
!
Example 27 !!$!!,! !! !!!!binary tree#!!$!'. !#"
"#("#": empty, leaf, node. "%%""#("#": isEmpty?, left,
right. !)& (& "!! " "!.
empty leaf node
0 !x.x !lt.!rt.(link lt rt)
isEmpty? left right
!t.(t = empty) !t.(t.1) !t.(t.2)
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
144 ! !!! !"
!!"#!$!!!!!%!!""!. "#!!!!!""",!"!
!! !!! " "", "!"! !!! " "", #"! !&!! !!! " "
!.
Example 26 !# !", "#!# !!$ !'. "! "#!"! " #"!
"#! !! " "!: " "#!" "#! #$ %! " !% !!# "#!
# !#" "#. & " $# %% nil& link"" %'. nil( 0#! "!%
'. ("#!! $!! 0& "%$" &"!" #"&!). link"!)! #"
! "!%':
!x.!lst.(x,lst)
"#! “link 1 nil” ( 1 %! "" "#! [1]#, “link 1 (link 2 nil)”(
[1, 2]* "#!# !%!.
"%%" "##!" "#!# #""" " !#%" "# isNil?& "#
!!!)$!"!""$!#'#%"#"! head" tail!"#!&!.
!)& (& %% "!%! &!.
isNil? head tail
!lst.(lst = nil) !lst.(lst.1) !lst.(lst.2)
!
Example 27 !!$!!,! !! !!!!binary tree#!!$!'. !#"
"#("#": empty, leaf, node. "%%""#("#": isEmpty?, left,
right. !)& (& "!! " "!.
empty leaf node
0 !x.x !lt.!rt.(link lt rt)
isEmpty? left right
!t.(t = empty) !t.(t.1) !t.(t.2)
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
144 ! !!! !"
!!"#!$!!!!!%!!""!. "#!!!!!""",!"!
!! !!! " "", "!"! !!! " "", #"! !&!! !!! " "
!.
Example 26 !# !", "#!# !!$ !'. "! "#!"! " #"!
"#! !! " "!: " "#!" "#! #$ %! " !% !!# "#!
# !#" "#. & " $# %% nil& link"" %'. nil( 0#! "!%
'. ("#!! $!! 0& "%$" &"!" #"&!). link"!)! #"
! "!%':
!x.!lst.(x,lst)
"#! “link 1 nil” ( 1 %! "" "#! [1]#, “link 1 (link 2 nil)”(
[1, 2]* "#!# !%!.
"%%" "##!" "#!# #""" " !#%" "# isNil?& "#
!!!)$!"!""$!#'#%"#"! head" tail!"#!&!.
!)& (& %% "!%! &!.
isNil? head tail
!lst.(lst = nil) !lst.(lst.1) !lst.(lst.2)
!
Example 27 !!$!!,! !! !!!!binary tree#!!$!'. !#"
"#("#": empty, leaf, node. "%%""#("#": isEmpty?, left,
right. !)& (& "!! " "!.
empty leaf node
0 !x.x !lt.!rt.(link lt rt)
isEmpty? left right
!t.(t = empty) !t.(t.1) !t.(t.2)
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
144 ! !!! !"
!!"#!$!!!!!%!!""!. "#!!!!!""",!"!
!! !!! " "", "!"! !!! " "", #"! !&!! !!! " "
!.
Example 26 !# !", "#!# !!$ !'. "! "#!"! " #"!
"#! !! " "!: " "#!" "#! #$ %! " !% !!# "#!
# !#" "#. & " $# %% nil& link"" %'. nil( 0#! "!%
'. ("#!! $!! 0& "%$" &"!" #"&!). link"!)! #"
! "!%':
!x.!lst.(x,lst)
"#! “link 1 nil” ( 1 %! "" "#! [1]#, “link 1 (link 2 nil)”(
[1, 2]* "#!# !%!.
"%%" "##!" "#!# #""" " !#%" "# isNil?& "#
!!!)$!"!""$!#'#%"#"! head" tail!"#!&!.
!)& (& %% "!%! &!.
isNil? head tail
!lst.(lst = nil) !lst.(lst.1) !lst.(lst.2)
!
Example 27 !!$!!,! !! !!!!binary tree#!!$!'. !#"
"#("#": empty, leaf, node. "%%""#("#": isEmpty?, left,
right. !)& (& "!! " "!.
empty leaf node
0 !x.x !lt.!rt.(link lt rt)
isEmpty? left right
!t.(t = empty) !t.(t.1) !t.(t.2)
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
언어 키우기 III: M3
5.5 !" !!! III: M3 145
!
5.5 !" !!! III: M3
5.5.1 !"! !! !: #!! !"! "!
!!! !"!" !"!! !!! !"! "!imperative features! !"# !!
!". !"#!# !!"". #!!!! !$" %$".
E !...
| malloc E
| !E
| E := E
| E ; E
"!# !"! !#" %#"", !"! !## "&! #' (", !"! !
## #' !$ !". !"!" !!#", #!!" !& ""# !#" "$
%&" '#!$ " # !". !## !"!" ($", ("!" !$"# !
#.
## #$ ()#! !"! !#! "'!":
v " Val = Closure + Z + B + Pair + Loc
! " Loc an infinite coutable set
" " Env = Idfin
! Val
!"! !#! ## ##", #!!" $$ $! #%#! !"!! ($!".
!"!#! #!!"$ $$# '###" )"# #*$# '$ !$)".
$! #%
",M # E $ v,M !
+ $ E! !* "% !"! M#" v" '#!" %& !"!! M ! #".
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
5.5 !" !!! III: M3 145
!
5.5 !" !!! III: M3
5.5.1 !"! !! !: #!! !"! "!
!!! !"!" !"!! !!! !"! "!imperative features! !"# !!
!". !"#!# !!"". #!!!! !$" %$".
E !...
| malloc E
| !E
| E := E
| E ; E
"!# !"! !#" %#"", !"! !## "&! #' (", !"! !
## #' !$ !". !"!" !!#", #!!" !& ""# !#" "$
%&" '#!$ " # !". !## !"!" ($", ("!" !$"# !
#.
## #$ ()#! !"! !#! "'!":
v " Val = Closure + Z + B + Pair + Loc
! " Loc an infinite coutable set
" " Env = Idfin
! Val
!"! !#! ## ##", #!!" $$ $! #%#! !"!! ($!".
!"!#! #!!"$ $$# '###" )"# #*$# '$ !$)".
$! #%
",M # E $ v,M !
+ $ E! !* "% !"! M#" v" '#!" %& !"!! M ! #".
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
146 ! !!! !"
!"!! !!#" !"! "! #! """.
M ! Memory = Locfin
" Val
!! !!$ "%# $".
!,M # E $ v,M !
!,M # E $ n,M !
!,M # malloc E $ ",M ! n > 0, {", " + 1, · · · , " + n % 1} &' Dom M !
!,M # E $ ",M !
!,M # !E $ M !("),M !
!,M # E1 $ ",M1 !,M1 # E2 $ v2,M2
!,M # E1 := E2 $ v2,M2{" (" v2}" ! Dom M2
!,M # E1 $ M1 !,M1 # E2 $ M2
!,M # E1 ; E2 $ M2
"" "! #"! !!!!#! !"! !&' !$"! %' !!#% #
%'". !#"",
!,M # E1 $ )#x.E,!!*,M1 ! # E2,M1 $ v,M2 !!{x (" v},M2 # E $ v!,M3
!,M # E1 E2 $ v!,M3
Exercise 2 !"!#""!%"'"$#!(")". "!& M0!"#
!* !( " )*!?
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
의미규칙
146 ! !!! !"
!"!! !!#" !"! "! #! """.
M ! Memory = Locfin
" Val
!! !!$ "%# $".
!,M # E $ v,M !
!,M # E $ n,M !
!,M # malloc E $ ",M ! n > 0, {", " + 1, · · · , " + n % 1} &' Dom M !
!,M # E $ ",M !
!,M # !E $ M !("),M !
!,M # E1 $ ",M1 !,M1 # E2 $ v2,M2
!,M # E1 := E2 $ v2,M2{" (" v2}" ! Dom M2
!,M # E1 $ M1 !,M1 # E2 $ M2
!,M # E1 ; E2 $ M2
"" "! #"! !!!!#! !"! !&' !$"! %' !!#% #
%'". !#"",
!,M # E1 $ )#x.E,!!*,M1 ! # E2,M1 $ v,M2 !!{x (" v},M2 # E $ v!,M3
!,M # E1 E2 $ v!,M3
Exercise 2 !"!#""!%"'"$#!(")". "!& M0!"#
!* !( " )*!?
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
146 ! !!! !"
!"!! !!#" !"! "! #! """.
M ! Memory = Locfin
" Val
!! !!$ "%# $".
!,M # E $ v,M !
!,M # E $ n,M !
!,M # malloc E $ ",M ! n > 0, {", " + 1, · · · , " + n % 1} &' Dom M !
!,M # E $ ",M !
!,M # !E $ M !("),M !
!,M # E1 $ ",M1 !,M1 # E2 $ v2,M2
!,M # E1 := E2 $ v2,M2{" (" v2}" ! Dom M2
!,M # E1 $ M1 !,M1 # E2 $ M2
!,M # E1 ; E2 $ M2
"" "! #"! !!!!#! !"! !&' !$"! %' !!#% #
%'". !#"",
!,M # E1 $ )#x.E,!!*,M1 ! # E2,M1 $ v,M2 !!{x (" v},M2 # E $ v!,M3
!,M # E1 E2 $ v!,M3
Exercise 2 !"!#""!%"'"$#!(")". "!& M0!"#
!* !( " )*!?
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
다른 식들의 의미규칙에도 메모리 반응이 쌓여가도록...
우리의 언어: M35.6 !" !!! III: M3 147
M3! !!" !! !!!!:
E ! x variable
| !x.E function
| E E application
| n integer
| true | false boolean
| let x = E in E
| if E E E
| rec f !x.E
| E + E
| E = E
| (E,E)
| E.1
| E.2
| malloc E
| !E
| E := E
| E ; E
"! !# ! 3" "#! !!" !"#!", #!!!"! !! (!$ #!!
!" ""!%, !$ !&! #!!!")" &$! ""'! "###!. #
" ! %"" !"# (!! !"!$ ""'! "%$& # (" !#!.
Exercise 3 #$! while E do E " ""#!. !# M3! !) # (!.
M3" "$ M0! !" # (#'"!, '"$" M0! !$%!.
SNU 4190.310 Programming Languages c!Kwangkeun Yi, Seoul National Univ., 2006, 2007, 2008
람다계산법에 기반정수참/거짓조건식재귀호출짝
메모리 반응
람다에 기반하면 좋은점
•값 중심의 프로그래밍
•[읽기] http://ropas.snu.ac.kr/~kwang/paper/maso/1.pdf
•안전한 타입 시스템