시드는 바뀌는 출력을 재현 가능하게 만든다.
생성기는 비공개 시드 하나를 호출마다 바꾸면서도 같은 시작값에서는 같은 수열을 다시 만들 수 있습니다.
생각해 볼 질문
상태가 매번 바뀌는 생성기가 어떻게 정확히 같은 수열을 반복할 수 있을까요?
- 현재 시드를 하나의 비공개 변경 가능 위치로 다루기
- 생성된 한 값에서 다음 값으로 이어지는 점화식 따라가기
- 결정론적 의사 난수와 외부 난수 구분하기
- 같은 시드로 생성기를 구성해 수열 재현하기
make-rand는 seed를 둘러쌉니다. 각 호출은 현재 값에 48271을 곱하고 2147483647로 나눈 나머지를 구한 다음, 그 결과를 seed에 다시 저장하고 반환합니다. 따라서 다음 호출은 이전 호출이 생성한 값에서 시작합니다.
점화식은 결정론적입니다. 따로 구성된 두 생성기는 각자의 비공개 위치에서 시작하지만, 시작 시드가 같으면 값 수열도 같아집니다. 이 수업의 생성기는 상태와 재현 가능성을 직접 관찰할 수 있게 만듭니다.
SICP 코드UTF-8 192 / 1,048,576바이트
예제
결과—
- 출력
- —
- 값
- —
- 진단
- —
실행 추적0 / 0 개 이벤트
첫 번째 프로그램은 (48271 182605794 1291394886 1914720637 2078669041)을 반환합니다. 두 번째 프로그램은 (337897 1278240558 337897 1278240558)을 반환합니다.
캡처된 seed의 각 set!을 찾고 저장된 결과가 다음 호출로 이어지는 과정을 따라가세요. 두 번째 프로그램에서는 첫 번째와 두 번째 값이 일치하더라도 두 클로저 환경을 서로 분리하여 살펴보세요.
프로그램을 수정하고 결과를 비교해 보세요.
right 생성기의 시드만 7에서 8로 변경하세요. 프로그램을 실행하기 전에 어느 위치가 여전히 일치할 수 있는지 예측해 보세요.
힌트 보기
두 생성기는 서로 독립된 위치를 가집니다. 동일한 점화식은 시작 시드가 같을 때만 수열을 재현합니다.