sicp.io
3.1.1 · 대입과 이력

프로시저는 앞서 일어난 일을 기억할 수 있다.

지역 바인딩은 뒤의 호출이 앞의 호출이 남긴 값을 볼 수 있을 때 상태가 됩니다. 프로시저가 지난 호출을 기억하는 방식을 예제로 살펴봅니다.

생각해 볼 질문

답이 이전 호출에 의존하기 시작하면 무엇이 달라질까요?

  • 반환값과 저장된 상태 구분하기
  • 연이은 호출 사이에서 대입 따라가기
  • 호출 순서가 관찰 가능해지는 시점 알아보기

withdraw는 balance 바인딩을 포획합니다. 성공한 각 호출은 새 값을 반환하기 전에 그 바인딩을 바꾸므로 다음 호출은 달라진 balance에서 시작합니다.

단일 바인딩을 가진 중첩된 let 식 세 개가 실행 순서를 명시적으로 만듭니다. 따라서 각 결과는 100에서 다시 시작하는 대신 앞선 호출이 남긴 상태를 반영합니다.

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

    첫 프로그램은 (75 50 insufficient-funds)를 반환합니다. 실패한 인출은 balance를 50으로 남깁니다.

    실행 추적에서 볼 점

    withdraw의 각 적용과 성공한 두 호출 안의 set! 식을 찾으세요. 마지막 호출은 다른 갈래에 도달하여 대입을 수행하지 않습니다.

    직접 해보기

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

    25를 인출하는 두 호출 사이에 10을 인출하는 호출을 넣으세요. 변경된 순서를 실행하기 전에 반환되는 모든 값을 예측하세요.

    힌트 보기

    성공한 각 호출 뒤의 balance를 기록하세요. 실패한 호출은 balance를 바꾸지 않습니다.

    이 수업 완료하기

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