이 문제는 'if문을 cond를 써서 대체할 수 있지 않겠나''cond를 써서 if를 보통 프로시저처럼 정의하면 안 될까?' 하는 생각에서 출발합니다.

 

저의 예상은 무한루프를 돈다고 생각했습니다.

이유는 sqrt-iter 프로시저를 실행시

new-if안의 인자인 sqrt-iter를 다시금 실행시켜

연습문제 1.5와 같은 이유로 무한반복을 하리라는 예상을 했습니다.

 

확인을 위해 코드를 작성하고 실행시켰습니다.

06

예상대로 오른쪽 밑에 있는 졸라맨은 무한정 달리고 있었습니다.

 

조금 더 살펴보니 컴퓨터가 끊기는 현상이 발생하더군요.

따라서 긴급히 Stop 버튼을 눌렀습니다.

break냐 kill이냐를 묻기에 kill이라 대답하였습니다.

07

 

제 예상이 맞았습니다.

그리고 여기에 관련해서 낭만고양이님이 포스팅을 하셨습니다.

'SICP Exercise : 연습문제 1.6'

 

 

PS

09

처음에 코드를 작성하고 실행을 하였더니 무한반복이 아니라 값을 다 내놓더군요.

제 예상이 틀렸다는 생각에 왜 그러한가 고민을 했습니다.

 

한참을 고민하다 그 이유를 찾았습니다.

sqrt-iter 프로시저 안의 if를 new-if로 바꿔야하는데,

그것을 깜박하고 그냥 실행시킨 것입니다.

그러니 당연히 예상과 다른 결과가 나오지요.

덕분에 삽질 제대로 했습니다.OTL...

 

 

참조

Structure and Interpretation of Computer Programs 2/E - Page 33

크리에이티브 커먼즈 라이센스
Creative Commons License
"in OCW" 카테고리의 다른 글
TAG , , ,

글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.

트랙백 주소 :: http://nosyu.pe.kr/trackback/1170

  1. 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.....

댓글을 달아 주세요

  1. 낭만고양이 2007/12/18 13:33  댓글주소  수정/삭제  댓글쓰기

    열심히 풀고 계시는군요. ㅋㅋ 한달쯤 뒤면 저보다 진도가 훨씬 많이 나가 계실듯...

  2. NoSyu 2007/12/18 17:03  댓글주소  수정/삭제  댓글쓰기

    /낭만고양이/
    반갑습니다.
    제가 머리가 나빠 속도는 매우 느립니다.OTL..ㅜㅜ

  3. 행인 2009/09/13 09:35  댓글주소  수정/삭제  댓글쓰기

    이 문제는 if를 cond로 대체할 수 있냐를 묻는게 아닙니다.

    cond역시 normal-order-evaluation이기 때문에

    단순히 cond로 바꿀시 원하는 답을 구할 수 있습니다.

    문제의 핵심은

    if를 new-if라는 일반 procedure로 대체할 수 있냐를 묻는 것입니다.

    new-if같은 일반 procedure은 applicative order evalutation이므로

    무한 루프에 빠지게 되는 것입니다.

    • OpenID LogoNoSyu 2009/09/14 07:27  댓글주소  수정/삭제

      반갑습니다.
      그렇군요.
      문제를 보니 '그냥 cond를 써서 if를 보통 프로시저처럼 정의하면 안 될까?'(Why can't I just define it as an ordinary procedure in terms of cond?)라고 적혀있는데 단순히 cond만을 언급하였네요.OTL
      좋은 지적 및 정보 고맙습니다.

[로그인][오픈아이디란?]