
773
18
장
with, match, else 블록
18
.
3
.
7
Procedure
: 클로저를 구현하는 클래스
Procedure
클래스는
Closure
라는 이름이 붙었으면 더 좋았을 것이다. 사실 이 클래스는 함수
정의와 함께 환경을 담기 때문이다. 함수 정의는 인수명과 함수 본체를 구성하는 표현식을 담
는다. 환경은 함수가 호출될 때 자유 변수(함수 본체 안에 나오지만, 인수도, 지역 변수도, 전
역 변수도 아닌 변수 )를 제공하는 데 사용되기 때문이다. 클로저와 자유 변수의 개념은
9
.
6
절
‘클로저’에서 설명했다.
파이썬에서 클로저를 사용하는 방법은 배웠지만,
lis.py
에서 클로저가 어떻게 구현되었는지
깊이 있게 살펴보자.
class Procedure:
“사용자 정의 스킴 프로시저”
def __init__( ❶
self, parms: list[Symbol], body: list[Expression], env: Environment
):
self.parms = parms ❷
self.body = body
self.env = env
def __call__(self, *args: Expression) -> Any: ❸
local_env = dict(zip(self.parms, args)) ❹
env = Environment(local_env, self.env) ...