모든 어휘 바인딩은 변경 가능한 셀입니다. 클로저는 프레임을 캡처하므로 같은 셀의 이후 set! 갱신을 공유합니다.
한눈에 보기
LISPEX
(define x 1)
(define get (lambda () x))
(set! x 2)
(get)결과
OUTPUT
2현재 보장
- 조회는 가장 가까운 어휘 셀을 택하며 섀도잉은 바깥 바인딩을 변경하지 않습니다.
letrec은 초기식 전에 셀을 할당하고 초기화되지 않은 셀을 읽으면 E321을 냅니다.- 최상위 중복
define은 기존 전역 셀을 갱신하여 이전 클로저 참조를 보존합니다.
경계
- 바인딩되지 않은 이름의
set!은 E303이며 새 바인딩을 만들지 않습니다. - 내부 미초기화 센티널은 게스트 값으로 표현할 수 없습니다.