29
SICP 3.5 스트림 cecil

컴퓨터 프로그램 구조와 해석 3.5

Embed Size (px)

Citation preview

Page 1: 컴퓨터 프로그램 구조와 해석 3.5

SICP����������� ������������������  3.5����������� ������������������  스트림

cecil

Page 2: 컴퓨터 프로그램 구조와 해석 3.5

이����������� ������������������  장에서는,����������� ������������������  스트림����������� ������������������  데이터����������� ������������������  구조를����������� ������������������  바탕으로����������� ������������������  상태를����������� ������������������  ����������� ������������������  

흉내내는����������� ������������������  방법을����������� ������������������  학습함����������� ������������������  

스트림이란?����������� ������������������  ����������� ������������������  

시간에����������� ������������������  따른����������� ������������������  데이터를����������� ������������������  이산����������� ������������������  값으로����������� ������������������  잴����������� ������������������  수����������� ������������������  있다는����������� ������������������  가정하에����������� ������������������  ����������� ������������������  

차례열로����������� ������������������  시간����������� ������������������  데이터를����������� ������������������  표현����������� ������������������  

(리스트����������� ������������������  대신����������� ������������������  delayed����������� ������������������  evaluation����������� ������������������  방법을����������� ������������������  사용)

Page 3: 컴퓨터 프로그램 구조와 해석 3.5

3.5.1����������� ������������������  스트림과����������� ������������������  (계산을)����������� ������������������  미룬����������� ������������������  리스트

Page 4: 컴퓨터 프로그램 구조와 해석 3.5

차례열����������� ������������������  프로그램을����������� ������������������  리스트의����������� ������������������  변환����������� ������������������  과정으로����������� ������������������  표현할����������� ������������������  경우����������� ������������������  

단계별����������� ������������������  처리����������� ������������������  과정을����������� ������������������  거칠때����������� ������������������  마다����������� ������������������  데이터����������� ������������������  구조를����������� ������������������  새로����������� ������������������  만들어서����������� ������������������  

복사하는����������� ������������������  일을����������� ������������������  피할����������� ������������������  도리가����������� ������������������  없다

Page 5: 컴퓨터 프로그램 구조와 해석 3.5

구간내의����������� ������������������  소수를����������� ������������������  모두����������� ������������������  구하는����������� ������������������  프로그램

반복하는����������� ������������������  방식으로����������� ������������������  구현

되도는����������� ������������������  방식으로����������� ������������������  구현

쓸데����������� ������������������  없는����������� ������������������  계산이����������� ������������������  많고,����������� ������������������  공간이����������� ������������������  낭비����������� ������������������  됨

Page 6: 컴퓨터 프로그램 구조와 해석 3.5

스트림은����������� ������������������  리스트만큼����������� ������������������  커다란����������� ������������������  대가를����������� ������������������  치리지����������� ������������������  않으면서,����������� ������������������  

차례열����������� ������������������  패러다임으로����������� ������������������  프로그램을����������� ������������������  짤����������� ������������������  수����������� ������������������  있음.����������� ������������������  

스트림을����������� ������������������  사용한����������� ������������������  방법����������� ������������������  

프로그램에서����������� ������������������  스트림을����������� ������������������  인자로����������� ������������������  받는����������� ������������������  경우,����������� ������������������  스트림을����������� ������������������  덜����������� ������������������  만든����������� ������������������  상태에서����������� ������������������  

전달����������� ������������������  후,����������� ������������������  실제로����������� ������������������  사용하려고����������� ������������������  할때����������� ������������������  필요한����������� ������������������  만큼����������� ������������������  원소를����������� ������������������  만들어����������� ������������������  냄

Page 7: 컴퓨터 프로그램 구조와 해석 3.5

리스트와����������� ������������������  대응하는����������� ������������������  스트림����������� ������������������  프로시저����������� ������������������  정의기본����������� ������������������  연산

각각의����������� ������������������  항목을����������� ������������������  처리하는����������� ������������������  연산 출력을����������� ������������������  위한����������� ������������������  연산

Page 8: 컴퓨터 프로그램 구조와 해석 3.5

스트림의����������� ������������������  구성����������� ������������������  (delay����������� ������������������  방식����������� ������������������  사용)

(delay����������� ������������������  <exp>)����������� ������������������  결과를����������� ������������������  미룬����������� ������������������  객체를����������� ������������������  생성����������� ������������������  

(force����������� ������������������  <delay����������� ������������������  object>):����������� ������������������  계산을����������� ������������������  적용

Page 9: 컴퓨터 프로그램 구조와 해석 3.5

스트림을����������� ������������������  이용한����������� ������������������  소수����������� ������������������  구하는����������� ������������������  프로그램

delay

force

Page 10: 컴퓨터 프로그램 구조와 해석 3.5

필요한����������� ������������������  순간����������� ������������������  필요한����������� ������������������  원소를����������� ������������������  생성����������� ������������������  

stream-filter의����������� ������������������  정의에����������� ������������������  따라����������� ������������������  만들어����������� ������������������  지는����������� ������������������  방식

하나씩����������� ������������������  풀어서����������� ������������������  쓸����������� ������������������  경우����������� ������������������  (10007을����������� ������������������  찾고����������� ������������������  이후����������� ������������������  과정)

필요한����������� ������������������  값만����������� ������������������  구간����������� ������������������  값만큼만����������� ������������������  필터로����������� ������������������  생성

Page 11: 컴퓨터 프로그램 구조와 해석 3.5

delay와����������� ������������������  force����������� ������������������  프로시저

delay의����������� ������������������  구현force의����������� ������������������  구현

Page 12: 컴퓨터 프로그램 구조와 해석 3.5

메모����������� ������������������  기능을����������� ������������������  적용한����������� ������������������  delay,����������� ������������������  force

delay의����������� ������������������  구현

force의����������� ������������������  구현

같은����������� ������������������  값을����������� ������������������  여러번����������� ������������������  되풀이����������� ������������������  하는����������� ������������������  경우����������� ������������������  효율적!!

Page 13: 컴퓨터 프로그램 구조와 해석 3.5

3.5.2����������� ������������������  무한����������� ������������������  스트림

Page 14: 컴퓨터 프로그램 구조와 해석 3.5

끝없이����������� ������������������  길게����������� ������������������  늘어진����������� ������������������  차례열을����������� ������������������  표현

7로����������� ������������������  나누어����������� ������������������  떨어지는����������� ������������������  않는����������� ������������������  정수����������� ������������������  스트림

양의����������� ������������������  정수를����������� ������������������  나타내는����������� ������������������  스트림

7로����������� ������������������  나누어����������� ������������������  지지����������� ������������������  않는����������� ������������������  100번째����������� ������������������  수

Page 15: 컴퓨터 프로그램 구조와 해석 3.5

에라토스테네스의����������� ������������������  체라는����������� ������������������  계산����������� ������������������  방법을����������� ������������������  ����������� ������������������  이용한����������� ������������������  무한����������� ������������������  소수����������� ������������������  스트림

필터가����������� ������������������  연속해서����������� ������������������  적용이����������� ������������������  됨

Page 16: 컴퓨터 프로그램 구조와 해석 3.5

스트림을����������� ������������������  드러나지����������� ������������������  않게����������� ������������������  정의하는����������� ������������������  방법

원소����������� ������������������  1의����������� ������������������  무한����������� ������������������  스트림

두����������� ������������������  스트림을����������� ������������������  더����������� ������������������  하는����������� ������������������  프로시저

끝����������� ������������������  없는����������� ������������������  양의����������� ������������������  정수의����������� ������������������  표현

Page 17: 컴퓨터 프로그램 구조와 해석 3.5

스트림을����������� ������������������  드러나지����������� ������������������  않게����������� ������������������  정의하는����������� ������������������  방법(2)

피보나치����������� ������������������  수열의����������� ������������������  정의

정해진����������� ������������������  상수����������� ������������������  값을����������� ������������������  곱한����������� ������������������  스트림을����������� ������������������  생성

Page 18: 컴퓨터 프로그램 구조와 해석 3.5

3.5.3����������� ������������������  스트림����������� ������������������  패러다임

Page 19: 컴퓨터 프로그램 구조와 해석 3.5

스트림����������� ������������������  프로세스로����������� ������������������  반복을����������� ������������������  표현하는����������� ������������������  방법����������� ������������������  (무한����������� ������������������  스트림을����������� ������������������  이용한����������� ������������������  제곱근����������� ������������������  구하기)

Page 20: 컴퓨터 프로그램 구조와 해석 3.5

신호를����������� ������������������  표현하는����������� ������������������  스트림연속하는����������� ������������������  시간����������� ������������������  간격의����������� ������������������  신호����������� ������������������  값들을����������� ������������������  줄줄이����������� ������������������  이어진����������� ������������������  스트림의����������� ������������������  원소로����������� ������������������  표현����������� ������������������  

덧셈기����������� ������������������  스트림����������� ������������������  x����������� ������������������  =����������� ������������������  (xi),����������� ������������������  첫값����������� ������������������  C,����������� ������������������  증분����������� ������������������  Dt를����������� ������������������  인수로����������� ������������������  받아서����������� ������������������  S=(Sj)로����������� ������������������  

뽑아내는����������� ������������������  연산을����������� ������������������  표현

Page 21: 컴퓨터 프로그램 구조와 해석 3.5

3.5.4����������� ������������������  스트림과����������� ������������������  셈미룸(delay)����������� ������������������  계산법

Page 22: 컴퓨터 프로그램 구조와 해석 3.5

루프(피드백)가����������� ������������������  있는����������� ������������������  시스템을����������� ������������������  모델링할때����������� ������������������  Cons-stream에����������� ������������������  숨어����������� ������������������  있는����������� ������������������  

delay����������� ������������������  연산이외에����������� ������������������  추가로����������� ������������������  delay����������� ������������������  연산을����������� ������������������  사용해야할����������� ������������������  경우가����������� ������������������  있음

Page 23: 컴퓨터 프로그램 구조와 해석 3.5

delay와����������� ������������������  force를����������� ������������������  사용하면����������� ������������������  프로그램의����������� ������������������  표현력을����������� ������������������  크게����������� ������������������  올릴����������� ������������������  수����������� ������������������  있음����������� ������������������  

이로����������� ������������������  인하여����������� ������������������  프로시저를����������� ������������������  계산하는����������� ������������������  방법이����������� ������������������  2가지가����������� ������������������  필요����������� ������������������  

(보통����������� ������������������  프로시저,����������� ������������������  셈미룸����������� ������������������  프로시저)����������� ������������������  

이를����������� ������������������  하나로����������� ������������������  하기����������� ������������������  위해서는����������� ������������������  모든����������� ������������������  프로시저가����������� ������������������  인자����������� ������������������  값����������� ������������������  계산을����������� ������������������  

미루도록����������� ������������������  하는����������� ������������������  것이����������� ������������������  필요����������� ������������������  

정의����������� ������������������  대로����������� ������������������  계산법이����������� ������������������  셈미룬����������� ������������������  프로시저를����������� ������������������  처리하는����������� ������������������  가장����������� ������������������  자연스러운����������� ������������������  방식

Page 24: 컴퓨터 프로그램 구조와 해석 3.5

3.5.5����������� ������������������  모델로����������� ������������������  바라본����������� ������������������  함수와����������� ������������������  물체

Page 25: 컴퓨터 프로그램 구조와 해석 3.5

상태가����������� ������������������  있는����������� ������������������  진짜����������� ������������������  시스템을����������� ������������������  컴퓨터����������� ������������������  프로그램으로����������� ������������������  시뮬레이션����������� ������������������  하기����������� ������������������  위한����������� ������������������  방법����������� ������������������  

•상태����������� ������������������  변수����������� ������������������  사용하여,����������� ������������������  덮어����������� ������������������  쓰기����������� ������������������  연산을����������� ������������������  적용����������� ������������������  

•스트림����������� ������������������  기법의����������� ������������������  적용����������� ������������������  

•스트림����������� ������������������  기법의����������� ������������������  특징:����������� ������������������  덮어����������� ������������������  쓰기를����������� ������������������  하지����������� ������������������  않고,����������� ������������������  상태를����������� ������������������  표현����������� ������������������  가능

Page 26: 컴퓨터 프로그램 구조와 해석 3.5

물체는����������� ������������������  상태����������� ������������������  변수로����������� ������������������  시뮬레이션하고,����������� ������������������  달라지는����������� ������������������  상태는����������� ������������������  상태����������� ������������������  변수를����������� ������������������  ����������� ������������������  

덮어쓰는����������� ������������������  것으로����������� ������������������  표현����������� ������������������  할����������� ������������������  수����������� ������������������  있다.����������� ������������������  

또한����������� ������������������  컴퓨터����������� ������������������  계산을����������� ������������������  물체로����������� ������������������  표현하는����������� ������������������  방식,����������� ������������������  즉����������� ������������������  물체����������� ������������������  방식이����������� ������������������  받아����������� ������������������  들이기����������� ������������������  쉽다����������� ������������������  

But,����������� ������������������  여러����������� ������������������  프로세스의����������� ������������������  동기를����������� ������������������  맞춘다거나����������� ������������������  하는����������� ������������������  껄끄러운����������� ������������������  문제가����������� ������������������  생김.����������� ������������������  

이러한����������� ������������������  문제를����������� ������������������  피해갈����������� ������������������  수����������� ������������������  있으����������� ������������������  함수����������� ������������������  프로그래밍����������� ������������������  언어가����������� ������������������  ����������� ������������������  

병행����������� ������������������  시스템을����������� ������������������  다루는데����������� ������������������  인기가����������� ������������������  있음.����������� ������������������  

하지만,����������� ������������������  함수����������� ������������������  방식을����������� ������������������  사용하더라도����������� ������������������  동기화����������� ������������������  문제에����������� ������������������  자유로울����������� ������������������  수����������� ������������������  없음.

Page 27: 컴퓨터 프로그램 구조와 해석 3.5

실세계의����������� ������������������  모형을����������� ������������������  시간에����������� ������������������  따라����������� ������������������  상태가����������� ������������������  변하는����������� ������������������  물체로����������� ������������������  볼수����������� ������������������  있고,����������� ������������������  ����������� ������������������  

그와����������� ������������������  달리����������� ������������������  상태����������� ������������������  없고,����������� ������������������  시간의����������� ������������������  영향을����������� ������������������  받지도����������� ������������������  않는����������� ������������������  단일체로����������� ������������������  볼수����������� ������������������  있다.����������� ������������������  ����������� ������������������  

양쪽����������� ������������������  다����������� ������������������  장점이����������� ������������������  있지만,����������� ������������������  어느����������� ������������������  한쪽도����������� ������������������  만족스러운����������� ������������������  해결책을����������� ������������������  주지����������� ������������������  않음.����������� ������������������  

상황에����������� ������������������  따라����������� ������������������  골라서����������� ������������������  사용하는����������� ������������������  지혜가����������� ������������������  필요

3장.����������� ������������������  결����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  론

Page 28: 컴퓨터 프로그램 구조와 해석 3.5

Q&A

Page 29: 컴퓨터 프로그램 구조와 해석 3.5

Reference• Harold����������� ������������������  Abelson,����������� ������������������  Gerald����������� ������������������  Jay����������� ������������������  Sussman,����������� ������������������  Julie����������� ������������������  Sussman,����������� ������������������  컴퓨

터����������� ������������������  프로그램의����������� ������������������  구조와����������� ������������������  해석(김재우,����������� ������������������  안윤호,����������� ������������������  김수정,����������� ������������������  김정민����������� ������������������  옮김).����������� ������������������  서울시����������� ������������������  마포구:����������� ������������������  인사이트,����������� ������������������  2008