프로시저는 과정에 이름을 붙인다.
작은 동작을 조합해 쓸모 있는 연산을 만들고 프로시저가 적용될 때 매개변수가 인수 값에 묶이는 과정을 살펴봅니다.
생각해 볼 질문
프로시저 정의는 표현식을 어떻게 재사용할 수 있는 방법으로 만들까요?
- 프로시저 정의를 매개변수와 본문으로 나누어 읽기
- 복합 프로시저가 한 번 적용되는 과정 따라가기
- 이름과 그 이름에 묶인 값 구분하기
square는 매개변수 하나를 받는 프로시저에 이름을 붙입니다. sum-of-squares는 square를 두 번 적용해 결과를 합칩니다. 정의는 방법을 기록할 뿐이며 프로시저가 적용되기 전에는 본문을 실행하지 않습니다.
프로시저를 적용하면 새 환경에서 각 매개변수가 인수 값에 묶입니다. 그 환경에서 본문을 평가하므로 3과 4를 넣은 sum-of-squares는 25를 반환합니다.
(begin
(define (square x) (* x x))
(define (sum-of-squares x y)
(+ (square x) (square y)))
(sum-of-squares 3 4))리스펙스 학습용 런타임리스펙스 SICP 프로필 1.0.0
리스펙스 SICP 런타임 불러오는 중
리스펙스 · SICP 코드UTF-8 122 / 1,048,576바이트
예제
결과—
- 출력
- —
- 값
- —
- 진단
- —
보이는 실행 흐름0 / 0 개의 실행 이벤트
첫 프로그램은 아무것도 출력하지 않고 25를 반환합니다.
square가 두 번 적용되는 지점을 찾아보세요. 같은 본문을 평가하지만 두 호출의 x는 서로 다른 값에 묶입니다. 이 실행 흐름은 한 번의 실행을 보는 제한된 학습 화면이며 리스펙스 바우치나 권한이 아닙니다.
힌트를 보기 전에 프로그램을 바꿔 보세요.
cube 프로시저를 사용해 sum-of-cubes를 정의한 다음 2와 3에 대해 실행하세요.
힌트 하나 보기
한 값을 세제곱하는 방법과 두 결과를 합치는 방법을 서로 나누어 두세요.