sicp.io
3.2.2 · 간단한 프로시저 적용

각 적용은 특정 부모에 연결된 프레임 하나를 더한다.

복합 프로시저가 다른 프로시저를 호출하거나 나중 적용할 클로저를 반환할 때 매개변수 프레임과 부모 연결을 기록합니다.

생각해 볼 질문

중첩되고 되풀이되는 프로시저 적용에서 같은 매개변수 이름은 어떻게 서로 다른 바인딩으로 남을까요?

  • 복합 프로시저 적용마다 매개변수 프레임 하나 만들기
  • 각 프레임을 프로시저에 저장된 환경에 연결하기
  • 서로 다른 x 값을 가진 square 프레임 구분하기
  • 반환된 클로저를 생성 프레임에서 나중 호출 프레임까지 따라가기
  • 프레임 transcript를 런타임 내부가 아닌 설명용 모형으로 읽기

modeled-sum-of-squares는 x = 3과 y = 4를 가진 프레임 하나를 기록합니다. 각 modeled-square 호출은 자기 x가 3 또는 4인 별도 자식 프레임을 기록합니다. 모든 적용이 다른 프레임을 가지므로 되풀이되는 매개변수 이름은 다른 호출을 덮어쓰지 않습니다.

make-adder는 x = 5인 프레임을 기록하고 그 환경에 계속 접근하는 클로저를 반환합니다. add-five를 나중에 호출하면 포획한 환경에 연결된 y = 7 프레임이 생깁니다. transcript는 이 연결을 드러내기 위해 교육용 프레임 이름을 사용합니다.

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

    첫 프로그램은 (25 ((sum-of-squares global ((x . 3) (y . 4))) (square sum-of-squares ((x . 3))) (square sum-of-squares ((x . 4)))))을 반환합니다. 두 번째는 (12 ((make-adder global ((x . 5))) (returned-procedure make-adder ((y . 7)))))을 반환합니다.

    실행 추적에서 볼 점

    설명용 프레임 레코드와 실제 프로시저 적용을 비교하세요. 서로 다른 square 호출 두 개와 그것을 요청한 부모 적용을 찾으세요. 클로저 실행에서는 make-adder 반환과 나중 add-five 적용을 나누고 포획한 x 조회를 찾으세요.

    직접 해보기

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

    modeled-average를 추가하고 한 프로시저에서 두 번 호출하세요. 모든 호출 프레임에 다른 숫자 id를 주고 어휘 부모와 요청한 호출자를 모두 기록하세요.

    힌트 보기

    어휘 부모와 동적 호출자는 서로 다른 질문에 답합니다. 설명용 레코드에 두 필드를 따로 두세요.

    이 수업 완료하기

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