sicp.io
2.1.4 · 구간 산술

선택자는 구간의 표현과 계산을 나눈다.

불확실한 양을 인터페이스 뒤의 아래 경곗값과 위 경곗값으로 나타내고 산술은 가능한 끝점 결과를 포함하는 새 구간을 만듭니다.

생각해 볼 질문

산술은 두 경곗값의 저장 방식에 기대지 않고 범위를 어떻게 사용할까요?

  • 아래 경곗값과 위 경곗값으로 구간 만들기
  • 순서쌍 표현을 bound 선택자 뒤에 두기
  • 구간 덧셈에서 경곗값 전파하기
  • 부호가 다를 때 끝점 곱 네 개 모두 비교하기

make-interval은 경곗값 두 개를 순서쌍에 저장하지만 add-interval과 mul-interval은 그 순서쌍을 직접 들여다보지 않습니다. 앞에서 유리수에 사용한 것과 같은 추상화 장벽을 유지하며 lower-bound와 upper-bound에게 항목을 요청합니다.

덧셈은 두 아래 경곗값과 두 위 경곗값을 각각 더합니다. 곱셈은 구간이 0을 지날 때 가장 작거나 큰 결과가 다른 끝점 조합에서 나올 수 있으므로 네 끝점 곱을 모두 비교해야 합니다. 결과는 가능한 곱 전체를 포함하는 구간 포락입니다.

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

    첫 프로그램은 (4 7)을 반환합니다. 두 번째 프로그램은 (-10 15)를 반환합니다.

    실행 추적에서 볼 점

    각 선택자 호출이 표현 장벽을 지나는 과정을 따라가세요. 곱셈에서는 min4와 max4가 반환할 경계를 고르기 전에 -8과 -10과 12와 15 네 곱을 모두 찾으세요. 고정 한도의 실행 흐름은 선택한 구간의 모든 경곗값 계산을 기록합니다.

    직접 해보기

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

    두 번째 구간을 (4, 5)에서 (-5, -4)로 바꾸세요. 실행하기 전에 네 끝점 곱과 결과의 아래 및 위 경곗값을 모두 예상해 보세요.

    힌트 보기

    첫 곱이 아래 경곗값이라고 가정하지 마세요. 끝점을 곱한 네 값을 모두 비교하세요.

    이 수업 완료하기

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