SlideShare a Scribd company logo
1 of 19
3.2 환경 계산법
맞바꿈 계산법(substitution model of evaluation)
• 인자를 받아서 프로시저의 값을 구하려면,
그 프로시저의 몸에서 각 인자 이름을 건네 받은 인자 값으로 모두 맞바꾸어 계산한다.
계산 과정
(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)))
But
프로그래밍 언어에 변수 값을 덮어쓰는 연산(set! 같은)이 들어가면,
이런 뜻풀이는 들어맞지 않는다.
변수는 그저 값을 가리키는 이름이라고 보는 대신에
값을 넣어 놓는 ‘자리'이름으로 보아야 한다.
환경 계산법에서 나오는 여러 가지 용어들
• 변수 일람표
• 프로시저 물체
• 프로시저 물체의 꼬리
(pointer)
• 둘러싸는 환경
• 맨 바깥쪽(global) 환경
• 문맥(context)
계산 규칙
• 새 프로시저 만들기
(define square
(lambda (x) (* x x)))
• 변수 일람표
• 프로시저 물체
• 프로시저 물체의 꼬리(pointer)
• 둘러싸는 환경
• 맨 바깥쪽(global) 환경
• 문맥(context)
계산 규칙
• 프로시저 적용
(square 5)
1. 먼저 새 환경(새 변수 일람표)을 만든다
2. 건네 받은 인자를 정의
(5와 square)
1. 새 환경에서 프로시저의 몸을 계산
이제 환경 계산법을 써서
set!이 어떻게 돌아가는지 알아보자
앞에서 했던 ‘돈 꺼내는 물체’를
환경 계산법으로 계산해보자
set!이 어떻게 돌아갈까
(define (make-withdraw balance)
(lambda (amount)
(if (>= balance amount)
(begin (set! balance (- balance amount))
balance)
"Insufficient funds")))
set!이 어떻게 돌아갈까
• 여기에 프로시저 물체를 하나 더 추가
(define W1 (make-withdraw 100))
set!이 어떻게 돌아갈까
• 이제 (W1 50) 을 계산한다
새 일람표를 둘러싸는 환경이 맨 바깥쪽 환경이 아니라 E1이다!!
(W1 프로시저 물체의 꼬리가 환경 E1을 가리키기 때문!!)
만약 W2를 추가해준다면?
• (define W2 (make-withdraw 100))
안쪽 정의를
환경 계산법으로 계산해보자
안쪽 정의
(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))
안쪽 정의
(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))
끝 !

More Related Content

Similar to 환경계산법

[SICP] 3.4 Concurrency : Time is of the essence - 병행성 : 시간은 중요하다.
[SICP] 3.4 Concurrency : Time is of the essence - 병행성 : 시간은 중요하다.[SICP] 3.4 Concurrency : Time is of the essence - 병행성 : 시간은 중요하다.
[SICP] 3.4 Concurrency : Time is of the essence - 병행성 : 시간은 중요하다.종빈 오
 
3ds maxscript 튜토리얼_20151206_서진택
3ds maxscript 튜토리얼_20151206_서진택3ds maxscript 튜토리얼_20151206_서진택
3ds maxscript 튜토리얼_20151206_서진택JinTaek Seo
 
하스켈 성능 튜닝
하스켈 성능 튜닝하스켈 성능 튜닝
하스켈 성능 튜닝민석 이
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229Yong Joon Moon
 
하스켈 프로그래밍 입문
하스켈 프로그래밍 입문하스켈 프로그래밍 입문
하스켈 프로그래밍 입문Kwang Yul Seo
 
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Circulus
 
1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법
1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법
1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법홍준 김
 
자료구조5보고서
자료구조5보고서자료구조5보고서
자료구조5보고서KimChangHoen
 
입문 Visual SLAM 14강 - 3장 3d rigid body transform
입문 Visual SLAM 14강 - 3장 3d rigid body transform입문 Visual SLAM 14강 - 3장 3d rigid body transform
입문 Visual SLAM 14강 - 3장 3d rigid body transformjdo
 
Javascript개발자의 눈으로 python 들여다보기
Javascript개발자의 눈으로 python 들여다보기Javascript개발자의 눈으로 python 들여다보기
Javascript개발자의 눈으로 python 들여다보기지수 윤
 
자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라Jong Gook Bae
 
Project#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpProject#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpKimjeongmoo
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409Yong Joon Moon
 
[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기
[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기
[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기종빈 오
 
2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdf2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdfjinwookhong
 
2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdf2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdfkd19h
 

Similar to 환경계산법 (20)

[SICP] 3.4 Concurrency : Time is of the essence - 병행성 : 시간은 중요하다.
[SICP] 3.4 Concurrency : Time is of the essence - 병행성 : 시간은 중요하다.[SICP] 3.4 Concurrency : Time is of the essence - 병행성 : 시간은 중요하다.
[SICP] 3.4 Concurrency : Time is of the essence - 병행성 : 시간은 중요하다.
 
R 시작해보기
R 시작해보기R 시작해보기
R 시작해보기
 
3ds maxscript 튜토리얼_20151206_서진택
3ds maxscript 튜토리얼_20151206_서진택3ds maxscript 튜토리얼_20151206_서진택
3ds maxscript 튜토리얼_20151206_서진택
 
하스켈 성능 튜닝
하스켈 성능 튜닝하스켈 성능 튜닝
하스켈 성능 튜닝
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229
 
하스켈 프로그래밍 입문
하스켈 프로그래밍 입문하스켈 프로그래밍 입문
하스켈 프로그래밍 입문
 
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
 
1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법
1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법
1.3장 차수 높은 프로시저(higher order procedure)로 요약하는 방법
 
자료구조5보고서
자료구조5보고서자료구조5보고서
자료구조5보고서
 
입문 Visual SLAM 14강 - 3장 3d rigid body transform
입문 Visual SLAM 14강 - 3장 3d rigid body transform입문 Visual SLAM 14강 - 3장 3d rigid body transform
입문 Visual SLAM 14강 - 3장 3d rigid body transform
 
Javascript개발자의 눈으로 python 들여다보기
Javascript개발자의 눈으로 python 들여다보기Javascript개발자의 눈으로 python 들여다보기
Javascript개발자의 눈으로 python 들여다보기
 
자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라자바프로그래머를 위한 스칼라
자바프로그래머를 위한 스칼라
 
Project#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpProject#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 Hwp
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409
 
[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기
[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기
[SICP] 4.4 Logic Programming : 논리로 프로그램 짜기
 
Clojure Monad
Clojure MonadClojure Monad
Clojure Monad
 
이산치1번
이산치1번이산치1번
이산치1번
 
2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdf2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdf
 
이산치2번
이산치2번이산치2번
이산치2번
 
2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdf2012 Dm A0 02 Pdf
2012 Dm A0 02 Pdf
 

환경계산법

  • 2. 맞바꿈 계산법(substitution model of evaluation) • 인자를 받아서 프로시저의 값을 구하려면, 그 프로시저의 몸에서 각 인자 이름을 건네 받은 인자 값으로 모두 맞바꾸어 계산한다.
  • 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. 새 환경에서 프로시저의 몸을 계산
  • 8. 이제 환경 계산법을 써서 set!이 어떻게 돌아가는지 알아보자
  • 9. 앞에서 했던 ‘돈 꺼내는 물체’를 환경 계산법으로 계산해보자
  • 10. set!이 어떻게 돌아갈까 (define (make-withdraw balance) (lambda (amount) (if (>= balance amount) (begin (set! balance (- balance amount)) balance) "Insufficient funds")))
  • 11. set!이 어떻게 돌아갈까 • 여기에 프로시저 물체를 하나 더 추가 (define W1 (make-withdraw 100))
  • 12. set!이 어떻게 돌아갈까 • 이제 (W1 50) 을 계산한다
  • 13. 새 일람표를 둘러싸는 환경이 맨 바깥쪽 환경이 아니라 E1이다!! (W1 프로시저 물체의 꼬리가 환경 E1을 가리키기 때문!!)
  • 14.
  • 15. 만약 W2를 추가해준다면? • (define W2 (make-withdraw 100))
  • 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))
  • 19. 끝 !