(Lispex)sicp.io
1.8 · 고정점 탐색

변환은 스스로 다음 추측값을 만든다.

하나의 변환을 되풀이해 출력값을 다음 입력값으로 넘기고 횟수를 명시적인 정지 규칙으로 두면 추측값이 바뀌는 과정을 관찰할 수 있습니다.

생각해 볼 질문

변환을 적용해도 바뀌지 않는 값을 찾는다는 말은 무엇을 뜻할까요?

  • 변환을 프로시저 값으로 다루기
  • 변환한 결과를 다음 반복의 추측값으로 넘기기
  • 고정된 횟수를 명시적인 정지 규칙으로 사용하기
  • 일반적인 수렴을 주장하지 않고 이어지는 추측값 살펴보기

f의 고정점은 f(x)가 x와 같은 값이 되는 x입니다. x를 1 + 1/x로 바꾸는 변환은 황금비를 고정점으로 가지므로 1.0에서 이 변환을 되풀이하면 그 값의 위아래를 오가는 추측값이 만들어집니다.

fixed-point는 관찰할 수 없는 오차 한도 안에 정지 결정을 숨기지 않습니다. 변환과 현재 추측값과 남은 횟수가 프로세스의 완전한 상태입니다. 이력을 만드는 버전은 같은 값 전달을 기록해 번갈아 나타나는 추측값을 그대로 보여 줍니다.

리스펙스 · SICP 코드SICP에 필요한 Scheme 호환 문법을 리스펙스 SICP 프로필로 실행합니다.
(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 개의 실행 이벤트
    이 브라우저 결과는 리스펙스 바우치나 권한이 아닙니다.wasm —
    예상 관찰

    첫 프로그램은 변환을 열두 번 적용한 뒤 1.6180257510729614를 반환합니다. 두 번째 프로그램은 (1.0 2.0 1.5 1.6666666666666665 1.6 1.625 1.6153846153846154)를 반환합니다.

    실행 흐름에서 볼 점

    improve가 보통의 프로시저 값으로 전달되는 과정을 따라간 뒤 반환된 숫자가 다음 추측값이 되고 remaining이 줄어드는 모습을 보세요. 완전하지만 제한된 이 실행 흐름은 고정된 이번 실행만 설명하며 모든 시작값에서의 수렴이나 리스펙스 바우치나 권한을 주장하지 않습니다.

    직접 해보기

    힌트를 보기 전에 프로그램을 바꿔 보세요.

    첫 프로그램의 변환 횟수를 열두 번에서 여덟 번으로 바꾸세요. 실행하기 전에 결과가 열두 번 적용한 값보다 큰지 작은지 예상해 보세요.

    힌트 하나 보기

    추측값은 고정점의 위아래를 번갈아 오가므로 횟수가 짝수인지 홀수인지 살펴보세요.