바인딩, 스코프, 셀, 변경

모든 어휘 바인딩은 변경 가능한 셀입니다. 클로저는 프레임을 캡처하므로 같은 셀의 이후 set! 갱신을 공유합니다.

한눈에 보기

LISPEX
(define x 1)
(define get (lambda () x))
(set! x 2)
(get)

결과

OUTPUT
2

현재 보장

  • 조회는 가장 가까운 어휘 셀을 택하며 섀도잉은 바깥 바인딩을 변경하지 않습니다.
  • letrec은 초기식 전에 셀을 할당하고 초기화되지 않은 셀을 읽으면 E321을 냅니다.
  • 최상위 중복 define은 기존 전역 셀을 갱신하여 이전 클로저 참조를 보존합니다.

경계

  • 바인딩되지 않은 이름의 set!은 E303이며 새 바인딩을 만들지 않습니다.
  • 내부 미초기화 센티널은 게스트 값으로 표현할 수 없습니다.