sicp.io
3.5.3 · 스트림 패러다임 활용

수치 프로세스는 개선되는 관찰의 스트림이 될 수 있다.

정확한 부분합과 제곱근 추측값을 지연된 수열로 만들고 한 비교에 필요한 유한한 앞부분만 요구합니다.

생각해 볼 질문

수치 반복이 마지막 답만 숨겨 돌려주는 대신 모든 중간 근삿값을 설명하면 무엇이 달라질까요?

  • 연속적인 수치 상태를 스트림 원소로 표현하기
  • 무한 항 스트림을 정확한 부분합으로 누적하기
  • 고정된 반복 루프 없이 Newton 제곱근 추측값 만들기
  • 나머지 프로세스는 지연한 채 유한한 앞부분 요구하기
  • 유한한 Newton 개선 수열 관찰하기

alternating-terms는 1, −1/2, 1/3, −1/4 같은 항을 설명합니다. partial-sums는 완성된 합을 지연된 꼬리에 넘기므로 각 스트림 원소는 무한 교대 조화급수의 재사용 가능한 근삿값입니다. stream-take는 결과에 보이는 pair 다섯 개만 강제합니다.

sqrt-stream은 √2를 향한 모든 Newton 개선을 드러냅니다. 정확한 유리수 수열은 1, 3/2, 17/12, 577/408, 665857/470832로 시작합니다. 생산자를 바꾸지 않고 더 많은 추측값을 살펴볼 수 있습니다. 표시한 앞부분은 선택한 시작값의 개선 수열을 정확히 기록합니다.

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

    부분합은 (1 1/2 5/6 7/12 47/60)입니다. 제곱근 추측값은 (1 3/2 17/12 577/408 665857/470832)입니다.

    실행 추적에서 볼 점

    이미 만들어진 무한 리스트를 상상하지 말고 force 연산을 세세요. partial-sums에서는 이전 합이 다음 지연 단계로 넘어가는 과정을 따라가세요. sqrt-stream에서는 현재 추측값과 다음 추측값 공식을 담은 promise를 구분하세요.

    직접 해보기

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

    역제곱 부분합 스트림을 만들고 값 여섯 개를 요구하세요. 그 다음 연속한 두 inexact 추측값의 차이가 보이는 허용 오차보다 작을 때 멈추는 stream-limit 소비자를 만드세요.

    힌트 보기

    생산자와 종료 정책을 분리하세요. 소비자는 이웃한 원소를 비교하되 스트림은 모든 중간 상태를 유지할 수 있습니다.

    이 수업 완료하기

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