되도는 프로세스(recursive process)와

되도는 프로시저(recursive procedure),

그리고 되도는 프로세스(recursive process)와

반복하는 프로세스(iterative process)를 헷갈려했기에

간단한 문제이지만 기록하겠습니다.

 

c16

(책의 페이지가 나눠져 있어 중간에 선이 있습니다.)

(inc는 1을 증가시키는, dec는 1을 감소시키는 프로시저입니다.)

- SICP 47쪽

 

 

소스만 가지고 이해가 잘 되지 않아 예를 들어 생각하였습니다.

(+ 3 4)을 첫번째 프로시저로 돌려보았습니다.

 

(+ 3 4)

(inc (+ 2 4))

(inc (inc (+ 1 4)))

(inc (inc (inc (+ 0 4))))

(inc (inc (inc 4)))

(inc (inc 5))

(inc 6)

7

 

곧바로 셈하지 못하고 미루어 놓은 연산이 끈처럼 이어지니

이것은 되도는 프로세스(recursive process)의 특징입니다.

 

그럼 두번째 프로시저로 돌려보았습니다.

 

(+ 3 4)

(+ 2 5)

(+ 1 6)

(+ 0 7)

7

 

이 프로시저는 되도는 프로시저이지만,

프로세스가 늘거나 줄지 않고 계산을 반복하고 있기에

반복하는 프로세스(iterative process)입니다.

 

 

이것이 헷갈리는 이유는 아마도 책에서 언급한것처럼

for, while로 반복 프로세스를 나타내는 C를 먼저 배웠기에

그렇지 않은 Lisp가 이상하게 느껴지는 듯싶습니다.

 

 

참조

Structure and Interpretation of Computer Programs 2/E - Page 46~47

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

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

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

  1. Subject: SICP 연습문제 1.10

    Tracked from 탱이의 세상만사 2008/01/25 00:50  삭제

    연습문제 1.10 다음 프로세스를 이용하여 f, g, h 프로시저의 기능을 수학으로 정의하는 문제이다.(Language : text)(define (A x y) (cond ((= y 0) 0) ((= x 0) (* 2 y)) ((= y 1) 2) (else (A (- x 1) (A x (- y 1)))))) 프로시저 실행 문제의 답은 위와 같다. 실질적인 문제는 바로 다음인데.....나는 노가다(?)로 풀었다. (Language : text)(.....

댓글을 달아 주세요

  1. 뎅궁씨 2008/01/04 13:04  댓글주소  수정/삭제  댓글쓰기

    노슈님 그런데 SICP는 어디에 써먹는건가요?

  2. NoSyu 2008/01/04 13:33  댓글주소  수정/삭제  댓글쓰기

    /뎅궁씨/
    MIT 수업 교재라 공부하고 있습니다.^^;;
    거기에 현재 동아리 스터디로 추진되고 있어서..;;;
    어디에 써먹는지도 저도 잘....

  3. 이국진 2008/02/28 12:15  댓글주소  수정/삭제  댓글쓰기

    저 그런데 이 소스 실행하면 무한루푸 돌지 않나요?

    저는 둘 다 실행하면 결과값이 나오질 않아서요. 무한루푸만 도네요.

  4. 어이 2008/02/28 12:57  댓글주소  수정/삭제  댓글쓰기

    @이국진: 저도 어제 1.9 풀었는데요 ^^ + 연산자 재정의 때문에 문제가 생기는 듯 하네요. 적어도 Standard(R5RS)에서는 연산자를 +로 하시면 안 돼요. 저는 plus로 바꿔서 만들었더니 잘 되네요.

  5. NoSyu 2008/02/28 13:00  댓글주소  수정/삭제  댓글쓰기

    /이국진/
    반갑습니다.
    그러고보니 둘을 돌려보지 않았네요.
    전 간단히 계산 과정을 밝혀서..^^;;;
    밑에 분이 답을 해주셨네요.^^

  6. NoSyu 2008/02/28 13:01  댓글주소  수정/삭제  댓글쓰기

    /어이/
    반갑습니다..
    Scheme에서 연산자 재정의가 어떻게 되는지 모르겠습니다.
    그것이 잘 안되는가보군요.^^;;
    SICP만 따라서 배우다보니 전혀 모르겠습니다.OTL....

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