sicp.io
3.2.4 · 내부 정의와 지역 프로시저 묶음

내부 이름은 서로 협력하는 하나의 지역 프로그램을 설명한다.

프로시저를 한 번 호출하면 여러 이름 붙은 도우미가 사는 비공개 환경을 만들 수 있습니다. 서로 재귀적으로 부르는 도우미도 지역 정의가 설치된 뒤 같은 호출 환경에서 이름을 찾습니다.

생각해 볼 질문

여러 지역 프로시저가 바깥 환경에 이름을 흘리지 않으면서 서로를 참조하려면 어떻게 해야 할까요?

  • 지역 정의와 전역 바인딩 구분하기
  • 호출 환경 하나에서 서로 재귀적인 도우미 따라가기
  • 클로저가 적용될 때 도우미 이름을 찾는 이유 설명하기
  • 모든 바인딩을 만든 뒤 대입하는 scan-out 모형 구성하기
  • 명시적인 unassigned 표시와 올바른 프로시저 값 구분하기

classify-parity를 호출할 때마다 even-step과 odd-step이 그 호출 안에서 만들어집니다. 두 클로저는 같은 호출 환경을 공유하므로 even-step은 odd-step을, odd-step은 even-step을 부를 수 있지만 어느 이름도 전역으로 노출되지 않습니다. 실제 호출은 두 지역 정의가 모두 처리된 뒤에 일어나며 classify-parity를 다시 호출하면 새로운 비공개 바인딩 묶음이 생깁니다.

두 번째 프로그램은 정의를 인용된 데이터로 다루고 동시적인 지역 범위를 설명하는 scan-out 모양을 만듭니다. 먼저 모든 이름을 명시적인 unassigned 표시로 바인딩하고, set!으로 각 프로시저 값을 설치한 뒤, 남은 본문을 평가하는 형태입니다. 이번 실행은 변환 데이터와 unassigned 및 set! 구조를 화면에 직접 드러냅니다.

SICP 코드UTF-8 333 / 1,048,576바이트
예제
결과
출력
진단
실행 추적0 / 0 개 이벤트
    실행은 브라우저 안에서 이루어지며 프로그램 결과와 실행 추적을 보여줍니다.
    예상 결과

    첫 프로그램은 ((#f #t) (#t #f))를 반환합니다. 두 번째 프로그램은 even-step과 odd-step을 인용된 *unassigned* 표시에 바인딩한 let 식과 두 set! 형식, 원래 본문을 반환합니다.

    실행 추적에서 볼 점

    첫 실행에서는 classify-parity가 만든 환경을 찾고 전역 even-step이나 odd-step 조회 없이 번갈아 적용되는 호출을 따라가세요. 두 번째 실행에서는 인용된 정의를 읽는 일과 바인딩, lambda 값, 대입, 최종 본문을 만드는 일을 구분하세요. 생성된 형식은 이 유한 입력의 설명 모형이며 모든 변환 단계를 화면에 드러냅니다.

    직접 해보기

    프로그램을 수정하고 결과를 비교해 보세요.

    세 개의 서로 재귀적인 프로시저로 나머지 0, 1, 2 상태를 순환하는 지역 divisible-by-three? 도우미 묶음을 만드세요. 공개 분류 프로시저 하나 안에 이름을 숨기고 8과 9의 결과를 예상하세요.

    힌트 보기

    각 도우미는 나머지 한 종류를 나타내고 1을 뺀 뒤 다음 도우미를 부릅니다. 나머지 0 도우미만 값이 0일 때 참을 반환합니다.

    이 수업 완료하기

    이 장의 총 21개 수업 중 0개 완료0%