🔔 Lexical Scope
변수(identifier)의 scope이 compile time에 정의된다.
변수의 bind-bound 관계는 프로그램 구조에 따라서 결정된다. (early-binding)
대부분의 프로그래밍 언어에 해당한다.위 코드에서 z는 def f x = x + z에서 정의되지 않았으므로, free identifier error을 일으킨다.
🔔 Dynamic Scope
변수의 scope이 runtime에 결정된다.
변수의 bind-bound 관계는 runtime 상에서 그 호출된 상태의 메모리에 따라서 결정된다. (late-binding)
높은 단계의 program freedom을 가진다.
dynamic scope에선 위 코드가 오류가 아니다. z가 free identifier이어도 신경쓰지 않는다. bind-bound를 compile time에 하지 않기 때문이다.
bind-bound 관계는 program이 실행될 때까지 기다렸다가, 함수가 호출될 때까지 기다린다. 따라서 bind-bound 는 함수가 호출된 이후에, 메모리에 따라서 실행된다. y = 3, z = 4가 memory에 저장되어 있으니까, z가 사용될 때 4가 된다. 즉, def f x = z + x에서의 z는 z = 4에 bound된다.
따라서 f ( z - y ) 호출 될 때, z 는 4이고 y는 3이므로 1이 인자로 전달되고, x + z는 5가 된다.
즉 함수가 하나고, 그 함수의 파라미터는 하나뿐이었다.
program은 expr도 가능하기에, 함수가 없을 수도 있다. 즉 program은 0 or more functions가 가능하다!
Overbar는 0 혹은 그 이상을 의미한다.
multiple parameter가 가능하도록 업데이트해보자.
var_list ::= var var_list | var이 된다.
더불어 decl ::= def var = expr endef로 함으로써, 파라미터가 아예 존재하지 않는 것도 가능케 한다.
🌱 Fstore는 추상 메모리에 저장된 함수들을 나타낸다.
Fstore = 함수 이름을 입력받아 매개 변수 목록과 함수 본문으로 이루어진 쌍(pair)을 반환하는 함수들의 집합(set)
🌱Fstore의 표기
Fstore :
Var -> Varlist x E
함수 이름을 입력받아 매개 변수 목록(Varlist)과 함수 본문(E)으로 이루어진 쌍을 반환하는 함수들의 집합을 의미🌱 Λ 의미
Λ은 Fstore에 속하는 하나의 원소(element)이다.추상 메모리에 저장된 하나의 함수를 나타낸다. Λ ∈ Fstore는 "Λ이 Fstore에 속한다"는 의미이다.
🌱 추상 메모리를 사용하기 위한 함수
Λ(x)
: 추상 메모리 Λ에서 x의 값을 반환한다 즉, Λ(x)는 함수 이름 x에 해당하는 매개 변수 목록과 함수 본문 쌍을 반환한다.
Λ[x1↦([x21 ; … ; x2n], e)]:
추상 메모리 Λ에서 함수 이름 x1을 ([x21 ; … ; x2n], e)로 업데이트하고 새로운 추상 메모리를 반환한다. 이는 함수 이름 x1에 해당하는 매개 변수 목록과 함수 본문을 업데이트한 새로운 추상 메모리를 생성하는 것을 의미한다