Closures
-
Lisp에서 클로저(closures)Programmer/Programming 2016. 2. 18. 15:57
클로저란 함수가 lexical 환경(environment)의 변수를 참조하는 것을 말한다. 예를 들면, 아래 코드를 살펴보자. (defparameter *plus-10* (let ((x 10)) (lambda (y) (+ x y)))) X와 Y를 더하는 함수 객체를 만들고, *PLUS-10*이 이를 가르키게 한다. Lexical 변수 X는 LET 구문 블럭이 생성한 환경에 갇혀서 외부에서는 접근할 수 없다. LET 구문 블럭이 종료되었다는 것은 실행 흐름이 LET이 생성한 환경에서 벗어났다는 것을 의미한다. 그럼에도 불구하고, *PLUS-10*를 호출하면 X 변수를 참조할 수 있다. CL-USER> (funcall *plus-10* 20) 30 함수 객체가 다른 곳(예제에서는 dynamic 환경의 *PL..