연습문제 1.21은 프로시저를 실행하면 됩니다.

 

이 문제는 소수를 찾는 알고리즘의 자람 차수가 Θ(√n)이라는 것을 확인할 수 있습니다.

 

해당 소스에 나오는 runtime 프로시저는 PLT Scheme에는 없더군요.

그래서 낭만고양이님께서 해결법을 적어주셨습니다.

'SICP Exercise : 연습문제 1.22'

runtime이라는 프로시저 대신 current-milliseconds를 쓰면 됩니다.

 

그리고 프로시저를 만들어보니 낭만고양이님과 비슷한 형태가 나왔습니다.

그래서 낭만고양이 님의 소스를 봐주세요.^^;;

 

c6

다음으로 테스트를 해봤는데, 여기서 나온 백만으로는 시간 차이가 0으로 나왔기에

그 수를 매우 크게 늘렸습니다.

(저걸 어떻게 읽어야 합니까?;;)

 

c7

그렇게해서 나온 결과입니다.

 

sqrt 10이 대략 3이니 n이 10배 증가하면 시간은 3배 정도 증가합니다.

이를 실험적으로도 확인할 수 있었습니다.

 

 

이 문제를 처음에 이해를 잘못해서 min과 max인 줄 알았습니다.

그래서 삽질 좀 했죠.;;

 

이번에 제가 깨달은 것은 if문에서는 식은 하나만 쓸 수 있다는 점입니다.

앞에서 해당 내용을 배웠지만, 그것이 기억이 나지 않아 고생한 것입니다.

따라서 다음부터는 같은 삽질을 하지 않을 듯싶습니다.^^

(if문 대신 cond문을 쓰면 됩니다.)

 

 

참조

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

크리에이티브 커먼즈 라이선스
Creative Commons License

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

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

댓글을 달아 주세요

  1. 1130 2009/05/22 17:17  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 하나 여쭐려고합니다.
    runtime은 기본적으로 지원한다라고 명시되있는데 저같은 경우 정의되지 않았다고
    계속 뜨네요... square같은 것도 할 때마다 정의내리고 시작하는데

    아무래도 프로그램 맨 아래 프로그래밍 언어 설정을 해야 하는 건가요?
    스크린샷과 똑같게 하고 싶었는데 안되네요 잘;;;R5RS만 되게는 되는데...

    가르침을 주시면 감사하겠습니다.

    • NoSyu 2009/05/24 01:42  댓글주소  수정/삭제

      반갑습니다.
      (define (square x)
      (* x x))
      와 같은 코드를 코드 제일 처음에 추가하시면 됩니다.
      이 글은 처음에 적는 것이라 제가 전체 소스를 올리지 않았네요.
      후에 가면 제가 소스 코드를 전부 올렸습니다.
      아니면 http://nosyu.pe.kr/1292 에 가시면 소스 파일을 받으실 수 있습니다.

    • 1130 2009/05/24 13:06  댓글주소  수정/삭제

      감사합니다. 제가 최근에 sicp를 배우기 시작해서
      아직 헷갈리는 게 참 많습니다. (모국어와 문법 전혀 다른
      외국어 배우는 기부이랄까요 ㅎㅎ)

      그런데 언어설정하는 건 왜 있는거죠? 프로그래밍 상에서
      많이 영향을 미칠까요?

    • NoSyu 2009/05/24 23:23  댓글주소  수정/삭제

      저도 C나 C++과 같은 것을 배우다가 Lisp, Scheme를 사용하니 느낌이 이상했습니다.
      그래도 재미있는 것이 많이 있었고 또 SICP를 통해 많은 것을 배울 수 있었습니다.
      언어설정은 후에 나오는 내용과 관계가 있습니다.
      자세한 것은 그 때 보시길 바라며, 마침 넷평님께서 좋은 예제를 소개해주셨습니다.
      참고하세요.^^
      http://nosyu.pe.kr/1167#comment12696

  2. J.pis 2009/06/03 17:17  댓글주소  수정/삭제  댓글쓰기

    이 문제는 제가 지금 약간 혼란을 겪는 문제인데 이유인 즉슨

    겨우 완성했는데 runtime이 죄다 0 이 나오거든요;;;

    한 문제 문제마다 너무 오래걸려서 자책하기 일쑤라는 ㅠ_ㅠ

    NoSyu님 존경스럽습니다. (_._)

    • NoSyu 2009/06/04 08:34  댓글주소  수정/삭제

      저도 처음에는 한 문제당 푸는 시간이 오래 걸렸습니다.
      아무래도 Scheme 문법에 익숙하지 않다보니 C나 C++로 만들 수 있는 logic이 Scheme에서는 잘 떠오르지 않아 고생하였습니다.
      하지만 가면 갈수록 역시 늘어나더군요.
      힘내세요!^^

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