레지스터는 바뀌는 값을 모두 명시한다.
기계 상태를 고정된 레지스터 값 모음으로 나타내고 한 번의 전이가 다음 상태를 계산하게 할 수 있습니다.
생각해 볼 질문
계산을 다시 이어 가려면 어떤 정보가 상태에 있어야 할까요?
- 레지스터를 하나의 명시적인 상태 값으로 나타내기
- 한 번의 전이를 반복 실행과 분리하기
- 마지막 숫자만이 아니라 마지막 상태 읽기
state 리스트는 a와 b와 완료된 전이 횟수를 담습니다. step은 유클리드 축소를 한 번 수행하고 바뀌는 값을 숨기지 않은 채 새 리스트를 반환합니다.
run은 산술 규칙 자체를 담고 있지 않습니다. b가 0인지 묻고 그렇지 않으면 step을 반복하므로 전이 규칙과 컨트롤러가 분리된 채 유지됩니다.
SICP 코드UTF-8 316 / 1,048,576바이트
예제
결과—
- 출력
- —
- 값
- —
- 진단
- —
실행 추적0 / 0 개 이벤트
첫 프로그램은 마지막 레지스터 상태 (2 0 4)를 반환합니다. 최대공약수는 2이며 전이가 네 번 완료되었습니다.
각 step 적용을 따라가며 이전 b가 다음 a가 되는 과정을 살펴보세요. 상태 값은 산술 레지스터와 함께 전이 횟수를 기록합니다.
프로그램을 수정하고 결과를 비교해 보세요.
a를 30으로, b를 18로 두고 기계를 실행하세요. 전이 횟수를 포함한 완전한 마지막 상태를 예상하세요.
힌트 보기
나머지 연산을 할 때마다 새 리스트를 하나씩 적으세요.