sicp.io
1.1.7 · 블랙박스 추상화로서의 프로시저

좋은 경계는 계약은 드러내고 방법은 숨긴다.

호출자에게는 안정된 프로시저 하나를 제공하면서 지역 도우미와 다른 분해 방법은 그 경계 안의 구현 세부로 남깁니다.

생각해 볼 질문

프로시저 안의 무엇이 바뀌어도 모든 호출자를 함께 고칠 필요가 없을까요?

  • 공개 프로시저 계약과 지역 도우미 이름 구분하기
  • 블록 구조를 도우미 바인딩을 비공개로 두는 방법으로 이해하기
  • 지역 이름이 바깥의 무관한 같은 이름을 안전하게 가리는 과정 관찰하기
  • 같은 유한 입력에서 서로 다른 내부 분해 비교하기
  • 일치하는 예제를 화면에 나온 입력 범위에서 비교하기

sum-squares-two-largest는 입력 세 개와 숫자 결과 하나만 공개합니다. square와 지역 choose 프로시저는 구현 안에 속합니다. 전역 choose 바인딩은 global-marker로 남아 있습니다. 지역 도우미는 공개 프로시저 본문을 평가하는 동안에만 존재하기 때문입니다. 호출자는 선택한 두 수나 도우미 이름을 알 필요가 없습니다.

두 번째 프로그램은 같은 표본 결과를 서로 다른 분해로 계산합니다. 가장 큰 두 수를 직접 고르거나 세 제곱의 합에서 가장 작은 수의 제곱을 뺍니다. 내부 작업이 달라도 공개 질문은 같습니다. 한 유한 입력의 일치는 화면에 나온 표본에서 두 분해가 같은 결과를 낸다는 사실을 확정합니다.

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

    첫 프로그램은 (13 61 global-marker)를 반환합니다. 두 번째 프로그램은 (61 61 #t)를 반환합니다.

    실행 추적에서 볼 점

    sum-squares-two-largest 안으로 들어가 지역 square와 choose 바인딩을 찾고 전역 choose와 구분하세요. 비교 프로그램에서는 선택한 cond 갈래와 세 제곱을 더한 뒤 하나를 빼는 경로를 대조하면서 마지막 호출자 관찰과 내부 단계를 분리하세요.

    직접 해보기

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

    sum-squares-two-largest의 이름과 매개변수와 반환 결과를 유지한 채 본문을 빼기 방법으로 바꾸세요. 여러 입력을 실행하고 어떤 호출자 코드는 수정할 필요가 없었는지 기록하세요.

    힌트 보기

    추상화 경계는 공개 프로시저의 서명과 결과 계약입니다. 도우미 이름과 분해는 지역에 남길 수 있습니다.

    이 수업 완료하기

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