프로시저는 앞서 일어난 일을 기억할 수 있다.
지역 바인딩은 뒤의 호출이 앞의 호출이 남긴 값을 볼 수 있을 때 상태가 됩니다. 프로시저가 지난 호출을 기억하는 방식을 예제로 살펴봅니다.
생각해 볼 질문
답이 이전 호출에 의존하기 시작하면 무엇이 달라질까요?
- 반환값과 저장된 상태 구분하기
- 연이은 호출 사이에서 대입 따라가기
- 호출 순서가 관찰 가능해지는 시점 알아보기
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를 바꾸지 않습니다.