(Lispex)sicp.io
1.2 · 이름 붙이기

프로시저는 과정에 이름을 붙인다.

작은 동작을 조합해 쓸모 있는 연산을 만들고 프로시저가 적용될 때 매개변수가 인수 값에 묶이는 과정을 살펴봅니다.

생각해 볼 질문

프로시저 정의는 표현식을 어떻게 재사용할 수 있는 방법으로 만들까요?

  • 프로시저 정의를 매개변수와 본문으로 나누어 읽기
  • 복합 프로시저가 한 번 적용되는 과정 따라가기
  • 이름과 그 이름에 묶인 값 구분하기

square는 매개변수 하나를 받는 프로시저에 이름을 붙입니다. sum-of-squares는 square를 두 번 적용해 결과를 합칩니다. 정의는 방법을 기록할 뿐이며 프로시저가 적용되기 전에는 본문을 실행하지 않습니다.

프로시저를 적용하면 새 환경에서 각 매개변수가 인수 값에 묶입니다. 그 환경에서 본문을 평가하므로 3과 4를 넣은 sum-of-squares는 25를 반환합니다.

리스펙스 · SICP 코드SICP에 필요한 Scheme 호환 문법을 리스펙스 SICP 프로필로 실행합니다.
(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 개의 실행 이벤트
    이 브라우저 결과는 리스펙스 바우치나 권한이 아닙니다.wasm —
    예상 관찰

    첫 프로그램은 아무것도 출력하지 않고 25를 반환합니다.

    실행 흐름에서 볼 점

    square가 두 번 적용되는 지점을 찾아보세요. 같은 본문을 평가하지만 두 호출의 x는 서로 다른 값에 묶입니다. 이 실행 흐름은 한 번의 실행을 보는 제한된 학습 화면이며 리스펙스 바우치나 권한이 아닙니다.

    직접 해보기

    힌트를 보기 전에 프로그램을 바꿔 보세요.

    cube 프로시저를 사용해 sum-of-cubes를 정의한 다음 2와 3에 대해 실행하세요.

    힌트 하나 보기

    한 값을 세제곱하는 방법과 두 결과를 합치는 방법을 서로 나누어 두세요.