환경ѫ법
- 3. 계산 과정
(f 5)
(sum-of-squares (+ a 1) (* a 2))
(sum-of-squares (+ 5 1) (* 5 2))
(+ (square 6) (square 10))
(+ (* 6 6) (* 10 10))
(+ 36 100)
(define (square x)
(* x x))
(define (sum-of-squares x y)
(+ (square x) (square y)))
(define (f a)
(sum-of-squares (+ a 1) (* a 2)))
- 4. But
프로그래밍 언어에 변수 값을 덮어쓰는 연산(set! 같은)이 들어가면,
이런 뜻풀이는 들어맞지 않는다.
변수는 그저 값을 가리키는 이름이라고 보는 대신에
값을 넣어 놓는 ‘자리'이름으로 보아야 한다.
- 5. 환경 계산법에서 나오는 여러 가지 용어들
• 변수 일람표
• 프로시저 물체
• 프로시저 물체의 꼬리
(pointer)
• 둘러싸는 환경
• 맨 바깥쪽(global) 환경
• 문맥(context)
- 6. 계산 규칙
• 새 프로시저 만들기
(define square
(lambda (x) (* x x)))
• 변수 일람표
• 프로시저 물체
• 프로시저 물체의 꼬리(pointer)
• 둘러싸는 환경
• 맨 바깥쪽(global) 환경
• 문맥(context)
- 7. 계산 규칙
• 프로시저 적용
(square 5)
1. 먼저 새 환경(새 변수 일람표)을 만든다
2. 건네 받은 인자를 정의
(5와 square)
1. 새 환경에서 프로시저의 몸을 계산
- 10. set!이 어떻게 돌아갈까
(define (make-withdraw balance)
(lambda (amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Insufficient funds")))
- 13. 새 일람표를 둘러싸는 환경이 맨 바깥쪽 환경이 아니라 E1이다!!
(W1 프로시저 물체의 꼬리가 환경 E1을 가리키기 때문!!)
- 17. 안쪽 정의
(define (sqrt x)
(define (good-enough? guess)
(< (abs (- (square guess) x)) 0.001))
(define (improve guess)
(average guess (/ x guess)))
(define (sqrt-iter guess)
(if (good-enough? guess)
guess
(sqrt-iter (improve guess))))
(sqrt-iter 1.0))
- 18. 안쪽 정의
(define (sqrt x)
(define (good-enough? guess)
(< (abs (- (square guess) x)) 0.001))
(define (improve guess)
(average guess (/ x guess)))
(define (sqrt-iter guess)
(if (good-enough? guess)
guess
(sqrt-iter (improve guess))))
(sqrt-iter 1.0))