2012-09-10 8 views
1

필자는 사용한 숫자에 따라 코드를 실행할 때 두 가지 다른 동작을 보았을 때 SICP 책 1.6의 연습 문제를 해결하기 위해 노력했습니다.MIT 스키마 : 숫자에 따른 무한 루프의 다른 동작

sqrt-iter 프로 시저를 호출 할 때 자연수를 사용하면 인터프리터는 멈추지 않습니다. 그러나 부동 소수점 숫자를 사용하여 소수점 나누기를 강제하면 인터프리터가 응답합니다. 중단 중! : 최대 순환 깊이 초과.

다른 행동에 대한 이유를 아는 사람이 있습니까?

코드를 실행하려는 사람을 돕기 위해 내 대답과 함께 요점을 만들었습니다. 붙여 넣기 : http://bit.ly/Qv1wru. mit- 체계 버전은 9.1.1이다.

+0

당신이 사용하는 어떤 두 수 * 우리에게 얘기를 할 수 있습니다. * 또한 빌 도마뱀 (Bill the Lizard)의 솔루션을 살펴보십시오. http://www.billthelizard.com/2009/10/sicp-exercises-16-18.html –

답변

1

귀하의 good-enough? 절차가 잘못된 것 같다,이 하나를 시도 :

(define (good-enough? guess x) 
    (< (abs (- (sqr guess) x)) 0.001)) 
+0

감사합니다. Óscar 사용중인 버전으로 내 코드를 테스트 했습니까? 프로 시저는 동일하지만 동작은 동일합니다. 예상되는 행동은 운동의 일부인 무한 루프입니다. 사실 충분한만큼? 프로 시저가 호출되지 않습니다. 내 cuestion은 합리적인 숫자를 사용할 때 또는 10 진수를 사용하여 소수 나누기를 강제 할 때 통역사가 제공하는 다양한 응답에 관한 것입니다. 내 요지에 그 점을 지적하는 메모를 썼습니다. – jolisper