연습문제 1.21은 프로시저를 실행하면 됩니다.
이 문제는 소수를 찾는 알고리즘의 자람 차수가 Θ(√n)이라는 것을 확인할 수 있습니다.
해당 소스에 나오는 runtime 프로시저는 PLT Scheme에는 없더군요.
그래서 낭만고양이님께서 해결법을 적어주셨습니다.
runtime이라는 프로시저 대신 current-milliseconds를 쓰면 됩니다.
그리고 프로시저를 만들어보니 낭만고양이님과 비슷한 형태가 나왔습니다.
그래서 낭만고양이 님의 소스를 봐주세요.^^;;

다음으로 테스트를 해봤는데, 여기서 나온 백만으로는 시간 차이가 0으로 나왔기에
그 수를 매우 크게 늘렸습니다.
(저걸 어떻게 읽어야 합니까?;;)

그렇게해서 나온 결과입니다.
sqrt 10이 대략 3이니 n이 10배 증가하면 시간은 3배 정도 증가합니다.
이를 실험적으로도 확인할 수 있었습니다.
이 문제를 처음에 이해를 잘못해서 min과 max인 줄 알았습니다.
그래서 삽질 좀 했죠.;;
이번에 제가 깨달은 것은 if문에서는 식은 하나만 쓸 수 있다는 점입니다.
앞에서 해당 내용을 배웠지만, 그것이 기억이 나지 않아 고생한 것입니다.
따라서 다음부터는 같은 삽질을 하지 않을 듯싶습니다.^^
(if문 대신 cond문을 쓰면 됩니다.)
참조
Structure and Interpretation of Computer Programs 2/E - Page 68
"in OCW" 카테고리의 다른 글
- SICP Exercise 연습문제 1.25 (0)2008/01/17
- SICP Exercise 연습문제 1.24 (0)2008/01/17
- SICP Exercise 연습문제 1.23 (0)2008/01/17
- SICP Exercise 연습문제 1.22 (6)2008/01/17
- SICP Exercise 연습문제 1.20 (2)2008/01/14
- SICP Exercise 연습문제 1.19 (2)2008/01/14
- SICP Exercise 연습문제 1.17, 1.18 (0)2008/01/14
글에 잘못된 점, 다른 점, 부족한 점이 있다면 지적해주세요.
댓글, 트랙백, 메일 모두 고맙습니다.







댓글을 달아 주세요
안녕하세요 하나 여쭐려고합니다.
runtime은 기본적으로 지원한다라고 명시되있는데 저같은 경우 정의되지 않았다고
계속 뜨네요... square같은 것도 할 때마다 정의내리고 시작하는데
아무래도 프로그램 맨 아래 프로그래밍 언어 설정을 해야 하는 건가요?
스크린샷과 똑같게 하고 싶었는데 안되네요 잘;;;R5RS만 되게는 되는데...
가르침을 주시면 감사하겠습니다.
반갑습니다.
(define (square x)
(* x x))
와 같은 코드를 코드 제일 처음에 추가하시면 됩니다.
이 글은 처음에 적는 것이라 제가 전체 소스를 올리지 않았네요.
후에 가면 제가 소스 코드를 전부 올렸습니다.
아니면 http://nosyu.pe.kr/1292 에 가시면 소스 파일을 받으실 수 있습니다.
감사합니다. 제가 최근에 sicp를 배우기 시작해서
아직 헷갈리는 게 참 많습니다. (모국어와 문법 전혀 다른
외국어 배우는 기부이랄까요 ㅎㅎ)
그런데 언어설정하는 건 왜 있는거죠? 프로그래밍 상에서
많이 영향을 미칠까요?
저도 C나 C++과 같은 것을 배우다가 Lisp, Scheme를 사용하니 느낌이 이상했습니다.
그래도 재미있는 것이 많이 있었고 또 SICP를 통해 많은 것을 배울 수 있었습니다.
언어설정은 후에 나오는 내용과 관계가 있습니다.
자세한 것은 그 때 보시길 바라며, 마침 넷평님께서 좋은 예제를 소개해주셨습니다.
참고하세요.^^
http://nosyu.pe.kr/1167#comment12696
이 문제는 제가 지금 약간 혼란을 겪는 문제인데 이유인 즉슨
겨우 완성했는데 runtime이 죄다 0 이 나오거든요;;;
한 문제 문제마다 너무 오래걸려서 자책하기 일쑤라는 ㅠ_ㅠ
NoSyu님 존경스럽습니다. (_._)
저도 처음에는 한 문제당 푸는 시간이 오래 걸렸습니다.
아무래도 Scheme 문법에 익숙하지 않다보니 C나 C++로 만들 수 있는 logic이 Scheme에서는 잘 떠오르지 않아 고생하였습니다.
하지만 가면 갈수록 역시 늘어나더군요.
힘내세요!^^