각 적용은 특정 부모에 연결된 프레임 하나를 더한다.
복합 프로시저가 다른 프로시저를 호출하거나 나중 적용할 클로저를 반환할 때 매개변수 프레임과 부모 연결을 기록합니다.
중첩되고 되풀이되는 프로시저 적용에서 같은 매개변수 이름은 어떻게 서로 다른 바인딩으로 남을까요?
- 복합 프로시저 적용마다 매개변수 프레임 하나 만들기
- 각 프레임을 프로시저에 저장된 환경에 연결하기
- 서로 다른 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는 이 연결을 드러내기 위해 교육용 프레임 이름을 사용합니다.
- 출력
- —
- 값
- —
- 진단
- —
첫 프로그램은 (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를 주고 어휘 부모와 요청한 호출자를 모두 기록하세요.
힌트 보기
어휘 부모와 동적 호출자는 서로 다른 질문에 답합니다. 설명용 레코드에 두 필드를 따로 두세요.