이 문제는 'if문을 cond를 써서 대체할 수 있지 않겠나''cond를 써서 if를 보통 프로시저처럼 정의하면 안 될까?' 하는 생각에서 출발합니다.
저의 예상은 무한루프를 돈다고 생각했습니다.
이유는 sqrt-iter 프로시저를 실행시
new-if안의 인자인 sqrt-iter를 다시금 실행시켜
연습문제 1.5와 같은 이유로 무한반복을 하리라는 예상을 했습니다.
확인을 위해 코드를 작성하고 실행시켰습니다.
예상대로 오른쪽 밑에 있는 졸라맨은 무한정 달리고 있었습니다.
조금 더 살펴보니 컴퓨터가 끊기는 현상이 발생하더군요.
따라서 긴급히 Stop 버튼을 눌렀습니다.
break냐 kill이냐를 묻기에 kill이라 대답하였습니다.

제 예상이 맞았습니다.
그리고 여기에 관련해서 낭만고양이님이 포스팅을 하셨습니다.
PS
처음에 코드를 작성하고 실행을 하였더니 무한반복이 아니라 값을 다 내놓더군요.
제 예상이 틀렸다는 생각에 왜 그러한가 고민을 했습니다.
한참을 고민하다 그 이유를 찾았습니다.
sqrt-iter 프로시저 안의 if를 new-if로 바꿔야하는데,
그것을 깜박하고 그냥 실행시킨 것입니다.
그러니 당연히 예상과 다른 결과가 나오지요.
덕분에 삽질 제대로 했습니다.OTL...
참조
Structure and Interpretation of Computer Programs 2/E - Page 33
- SICP Exercise 연습문제 1.9 (7)2008/01/04
- SICP Exercise 연습문제 1.8 (4)2007/12/18
- SICP Exercise 연습문제 1.7 (4)2007/12/18
- SICP Exercise 연습문제 1.6 (5)2007/12/18
- SICP Exercise 연습문제 1.5 (4)2007/12/17
- SICP Exercise 연습문제 1.4 (0)2007/12/17
- SICP Exercise 연습문제 1.1 (0)2007/12/17
글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.
트랙백 주소 :: http://nosyu.pe.kr/trackback/1170
-
Subject: SCIP 연습문제 1.6
Tracked from 탱이의 세상만사 2008/01/23 12:57 삭제제곱근을 구하는 식에서 사용한 if 라는 특별문을 임의의 프로시져로 바꾸어서 사용하는 문제이다. 즉,(Language : text)(define (sqrt-iter guess x) (if (good-enough? guess x) guess (sqrt-iter (improve guess x) x)))를 다음과 같이 바꾸어서 실행했을 때 어떤 결과 값이 나오겠느냐....이다.(Language : text)(define (new-if predicat.....









댓글을 달아 주세요
열심히 풀고 계시는군요. ㅋㅋ 한달쯤 뒤면 저보다 진도가 훨씬 많이 나가 계실듯...
/낭만고양이/
반갑습니다.
제가 머리가 나빠 속도는 매우 느립니다.OTL..ㅜㅜ
이 문제는 if를 cond로 대체할 수 있냐를 묻는게 아닙니다.
cond역시 normal-order-evaluation이기 때문에
단순히 cond로 바꿀시 원하는 답을 구할 수 있습니다.
문제의 핵심은
if를 new-if라는 일반 procedure로 대체할 수 있냐를 묻는 것입니다.
new-if같은 일반 procedure은 applicative order evalutation이므로
무한 루프에 빠지게 되는 것입니다.
반갑습니다.
그렇군요.
문제를 보니 '그냥 cond를 써서 if를 보통 프로시저처럼 정의하면 안 될까?'(Why can't I just define it as an ordinary procedure in terms of cond?)라고 적혀있는데 단순히 cond만을 언급하였네요.OTL
좋은 지적 및 정보 고맙습니다.