이 글에 적혀진 답은 제대로 된 답이 아니라 생각하여 새로 풀었습니다.

SICP Exercise 연습문제 3.16 - 수정

 

 

이 문제는 리스트의 쌍 개수를 찾는 프로시저입니다.

이 프로시저가 틀린 이유와 무한루프를 도는 리스트를 그려보는 문제입니다.

 

c12

열심히 달리다가 메모리가 다 되었습니다.;;;

네.. 무한루프입니다.

하지만 그 전에 3, 4, 7은 잘 찍혔습니다.^^

 

다만 그 방법이 그리 좋지 못합니다.

x는 a, b를 가리키도록하고, y는 x를 가리키도록 하였습니다.

그리고 set-car! 프로시저를 써서 x의 car이 y를 가리키도록 하였습니다.

 

즉, 다음과 같은 구조로 만든 것입니다.

001

처음 정의는 위처럼 하였습니다.

여기서 set-car! 프로시저를 써서 바꾸었습니다.

002

그렇기에 x를 볼 때 y를 보게되고, y는 다시 x를 보게 되므로 무한루프에 빠집니다.

 

 

처음에는 set-car! 프로시저를 쓰지 않고 해결해보려고 하였으나

아무리 생각해도 뒤에 정의될 것을 앞에서 미리 얘기하는 것은 불가능이었습니다.

여기 예로 x를 정의할 때 y를 가리키라는 말을 할 수 없는 것입니다.

왜냐하면 x를 정의할 때 y는 정의되어있지 않습니다.

 

그럼 (define x ....)를 써서 하면 어떨까 생각했습니다만,

이는 기존의 것을 수정하는 것이 아닌

새로운 변수를 정의하고 이 이름을 단순히 x라고 하는 것뿐입니다.

 

따라서 결국 set-car! 프로시저를 써서 안의 내용을 수정하였습니다.OTL...

 

 

참조

해럴드 애빌슨, 김재우 역, <컴퓨터 프로그램의 구조와 해석>, 인사이트, 2007, pp. 337

 

 

; exercise 3.16
(define (count-pairs x)
  (if (not (pair? x))
      0
      (+ (count-pairs (car x))
         (count-pairs (cdr x))
         1)))

; answer
(count-pairs (list 1 2 3))
(count-pairs (list (list 1) 2 3))
(count-pairs (list (list 1 2) (list 3 4) 5))
(define x (list 'a 'b))
(define y (cons x x))
(set-car! x y)
(count-pairs (list x y))

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

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

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

댓글을 달아 주세요

  1. 민트 2008/03/25 15:34  댓글주소  수정/삭제  댓글쓰기

    노슈님. 방명록이 없어서 본문과 상관없는 덧글을 이곳에 달아봅니다.
    노슈님은 컴퓨터를 잘 아시니까..사소한 문젠데..
    제 디카 (니콘 똑딱이 P2 07년 발매작인가)에서 동영상을 촬영하고
    컴으로 옮길때 주로 메모리 카드(sd) 빼서 리더기에 꼽고 본체에 꼽아서
    옮기거나 디카 본체에 선 연결해서 옮기는데 동영상이 한두개씩
    매개변수 에러라면서 안옮겨집니다. 계속 해봐도 안되고 그러다 안되면
    결국 지우는데 ㅠㅠ 이거 왜 이런걸까요..??

    늘 그런건 아니고 가끔씩 그러는데..
    제가 뭐 잘못하고 있는거라도 있는지..
    혹시 왜 그러신지 아시나요..........??;

  2. NoSyu 2008/03/25 19:47  댓글주소  수정/삭제  댓글쓰기

    /민트/
    그러고보니 이글루스는 방명록이 없죠.^^;;

    저 컴퓨터 잘 모릅니다.OTL...

    매개변수 에러라면서 뜨는 것은 대체로 하드웨어 문제로 기억합니다.
    그러니 SD메모리를 새로 구입하시는 것이 괜찮은 듯싶습니다.
    리더기에 꼽든 본체에 꼽든 문제가 생긴다면 그것은 메모리 문제인 듯싶습니다.
    다른 메모리카드로 동영상을 끝까지 찍어보신다음에 확인해보세요.

    저도 정확히 무엇이 문제인지 모르겠습니다.OTL....

  3. skylove 2008/03/26 00:28  댓글주소  수정/삭제  댓글쓰기

    헐...알수 없는 컴터의 세계 ㅋㅋ

  4. NoSyu 2008/03/26 15:03  댓글주소  수정/삭제  댓글쓰기

    /skylove/
    정말 오묘한 세계입니다.^^;;;

  5. 민트 2008/03/26 15:53  댓글주소  수정/삭제  댓글쓰기

    노슈님 답변 감사합니다. 어제 댓글보고 생각을 좀 하다가
    '싼'디스크 1기가 샀네요. 디카 그리 오래된 디카는 아닌데
    매장직원이 제 디카 경우엔 나온지 좀 된거라 아마 최대 지원 메모리가
    1기가라고 2기가를 사려는 절 말리더라구요. 지원안되는거 잘못 넣으면
    기계 망가진다고.. 오늘 테스트 해보니 파일 잘 옮겨지고 괜찮네요.

    기존에 쓰던게 J-bank라는 중소기업의 100배속짜리 메모리였는데
    사진 찍을땐 반응이 빨라서 좋은데 에러가...중소기업이라 그런가..
    하여튼 감사해요~

  6. NoSyu 2008/03/27 07:49  댓글주소  수정/삭제  댓글쓰기

    /민트/
    아.. 그렇군요.
    하긴 제 디카도 서비스센터에 문의하니 공식(?)적인 용량지원은 1기가입니다.
    그런데 판매되는 제품을 보니 2기가 메모리와 함께 팔리더군요.
    그래서 2기가를 질렀습니다.
    일본여행할 때 전혀 문제가 없었던 것으로 보아 괜찮은 듯싶습니다.^^

    기술이 낮은 회사의 기준은 성능보다는 수명인 듯싶어요.
    '얼마나 오래 쓰느냐...'
    그것이 그 회사가 가진 기술력인 듯...

    도움이 되셨는지 모르겠습니다.
    좋은 사진 많이 찍으세요.^^

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