변환은 스스로 다음 추측값을 만든다.
하나의 변환을 되풀이해 출력값을 다음 입력값으로 넘기고 횟수를 명시적인 정지 규칙으로 두면 추측값이 바뀌는 과정을 관찰할 수 있습니다.
생각해 볼 질문
변환을 적용해도 바뀌지 않는 값을 찾는다는 말은 무엇을 뜻할까요?
- 변환을 프로시저 값으로 다루기
- 변환한 결과를 다음 반복의 추측값으로 넘기기
- 고정된 횟수를 명시적인 정지 규칙으로 사용하기
- 일반적인 수렴을 주장하지 않고 이어지는 추측값 살펴보기
f의 고정점은 f(x)가 x와 같은 값이 되는 x입니다. x를 1 + 1/x로 바꾸는 변환은 황금비를 고정점으로 가지므로 1.0에서 이 변환을 되풀이하면 그 값의 위아래를 오가는 추측값이 만들어집니다.
fixed-point는 관찰할 수 없는 오차 한도 안에 정지 결정을 숨기지 않습니다. 변환과 현재 추측값과 남은 횟수가 프로세스의 완전한 상태입니다. 이력을 만드는 버전은 같은 값 전달을 기록해 번갈아 나타나는 추측값을 그대로 보여 줍니다.
(begin
(define (fixed-point improve guess remaining)
(if (= remaining 0)
guess
(fixed-point improve
(improve guess)
(- remaining 1))))
(fixed-point (lambda (x) (+ 1.0 (/ 1.0 x)))
1.0
12))리스펙스 학습용 런타임리스펙스 SICP 프로필 1.0.0
리스펙스 SICP 런타임 불러오는 중
리스펙스 · SICP 코드UTF-8 283 / 1,048,576바이트
예제
결과—
- 출력
- —
- 값
- —
- 진단
- —
보이는 실행 흐름0 / 0 개의 실행 이벤트
첫 프로그램은 변환을 열두 번 적용한 뒤 1.6180257510729614를 반환합니다. 두 번째 프로그램은 (1.0 2.0 1.5 1.6666666666666665 1.6 1.625 1.6153846153846154)를 반환합니다.
improve가 보통의 프로시저 값으로 전달되는 과정을 따라간 뒤 반환된 숫자가 다음 추측값이 되고 remaining이 줄어드는 모습을 보세요. 완전하지만 제한된 이 실행 흐름은 고정된 이번 실행만 설명하며 모든 시작값에서의 수렴이나 리스펙스 바우치나 권한을 주장하지 않습니다.
힌트를 보기 전에 프로그램을 바꿔 보세요.
첫 프로그램의 변환 횟수를 열두 번에서 여덟 번으로 바꾸세요. 실행하기 전에 결과가 열두 번 적용한 값보다 큰지 작은지 예상해 보세요.
힌트 하나 보기
추측값은 고정점의 위아래를 번갈아 오가므로 횟수가 짝수인지 홀수인지 살펴보세요.