5

나는 혼란 스럽다. Clojure에서 고정 소수점 결합자가 무한 수의 응용 프로그램 후에 수학적으로 수렴하는 시퀀스의 고정 점을 평가하는 데 사용할 수있는 방법을 보여 주지만 사실 한정된 수의 단계 이후에 수렴하는 방법을 보여주고 싶었습니다. 부동 소수점의 유한 정밀도. 나는 분명히 여기에 뭔가 빠져있다.고정 소수점 연결자 사용? 왜 스택 오버플로?

(defn Y [r] 
    ((fn [f] (f f)) 
    (fn [f] 
    (r (fn [x] ((f f) x)))))) 

(defn simple-convergent [func] 
    (fn [x] 
    (if (zero? x) 
     0.0 
     (* 0.5 (func x))))) 

그때

user=> ((Y simple-convergent) 0.) 
0.0 
user=> ((Y simple-convergent) 0.2) 
java.lang.StackOverflowError (NO_SOURCE_FILE:0) 

내가이 스택 오버 플로우를 이해하지 못하는 얻을 수 있습니다. 더 일반적으로, 내 이전 게시물에 관련,이 방법으로 시퀀스의 고정 지점을 근사하는 데 사용할 수있는 고정 소수점 결합 자의 "올바른"버전을 제시 할 수 있는지 궁금합니다.

+3

마지막 줄은 아마도'(func (* 0.5 x))'일까요? 같은 x가 영원히 반복되는 것처럼 보입니다. –

답변

2

브라이언 카퍼 (Brian Carper)에게 감사드립니다. 수정 된 코드

(defn simple-convergent [func] 
    (fn [x] 
    (if (zero? x) 
     0.0 
     (func (* 0.5 x))))) 

은 예상대로 동작합니다. 다음 과제는 불안정한 고정 점을 찾는 고정 소수점 결합자를 만드는 것입니다. 위의 구현 된 Y 결합자가이 작업을 수행 할 수 있다고 생각하지 않습니다.