SICP 독서여자회 #42(3.2.1)

5530 단어 SICP
3.2
시도된 함수 생성 환경?
Ex 3.9
반복 버전
(define (factorial n)
    (if (= n 1) 1 (* n #?=(factorial (- n 1)))))
Trace
CALL factorial 6
#?="./ex3.9.scm":2:(factorial (- n 1))
  CALL factorial 5
#?="./ex3.9.scm":2:(factorial (- n 1))
    CALL factorial 4
#?="./ex3.9.scm":2:(factorial (- n 1))
      CALL factorial 3
#?="./ex3.9.scm":2:(factorial (- n 1))
        CALL factorial 2
#?="./ex3.9.scm":2:(factorial (- n 1))
#?-    1
        RETN factorial 2
#?-    2
      RETN factorial 6
#?-    6
    RETN factorial 24
#?-    24
  RETN factorial 120
#?-    120
RETN factorial 720
반복 버전
(define (factorial n) (fact-iter 1 1 n))
(define (fact-iter product counter max-count)
    (if 
        (> counter max-count)
        product
        (fact-iter (* counter product) (+ counter 1) max-count)))

Trace
CALL factorial 6
RETN factorial 720

정답

Ex.3.9 수정
누가 읽든지 함수의 공간이 무엇을 보고 있는지 가리킨다
(define (factorial n) (fact-iter 1 1 n))
(define (fact-iter product counter max-count)
(if (> counter max-count)
product
(fact-iter (* counter product)
(+ counter 1)
max-count)))
하하
  • global <- factorial
  • global <- fact-iter
  • 예컨대
    (define (a x)
        (define (b y) '1)
        (define (c z) '2)
    )
    
    global <- a <- b
              ↑c
    
    b, c는 a, 글로벌도 볼 수 있어요.

  • 4(a 1) 이때 새로운 프레임(E1)을 생성하고 E1->글로벌과 매개 변수를 x=1로 초기화합니다
  • 4
  • (a1)의 실행 절차는 (define(bx)...)E1에서 b라는 이름이 증가할 때 프레임은 증가하지 않습니다.
    이런 느낌입니다.

    그래서
    정답
  • 좋은 웹페이지 즐겨찾기