sicp.io
3.5.1 · 지연 평가

promise는 한 번 계산하고 그 값을 기억한다.

delay는 일을 나중으로 미루고 force는 그 일을 최대 한 번 수행한 뒤 메모이즈된 결과를 다시 사용합니다.

생각해 볼 질문

force를 두 번 호출해도 계산이 한 번만 일어나는 이유는 무엇일까요?

  • promise 생성과 force 적용 분리하기
  • 처음 계산되는 force와 메모이즈된 적중 관찰하기
  • 숨은 평가를 드러내기 위해 효과 카운터 사용하기

later를 만든다고 해서 그 본문이 실행되는 것은 아닙니다. 첫 번째 force는 calls를 0에서 1로 바꾸고 그 결과 값을 promise에 저장합니다.

두 번째 force는 본문을 다시 실행하지 않고 저장된 값을 반환합니다. 최종 calls 값은 1로 유지되어 결과에서 메모이제이션을 직접 확인할 수 있습니다.

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

    첫 프로그램은 (1 1 1)을 반환합니다.

    실행 추적에서 볼 점

    계산된 결과를 내는 force 사건 하나와 메모이즈 적중 결과를 내는 이후의 force 사건을 찾으세요. 둘은 동일한 promise 할당을 참조합니다.

    직접 해보기

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

    later를 세 번 더 force하고 결과의 마지막에 calls를 포함하세요. 어느 값이 바뀔 수 있는지 예측하세요.

    힌트 보기

    promise가 값을 저장하고 나면 이후의 force 연산은 지연된 본문을 평가하지 않고 그 값을 반환합니다.

    이 수업 완료하기

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