<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="http://nosyu.egloos.com/style/style_rss.xsl" type="text/xsl" media="screen"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
	<title>NoSyu의 주저리 주저리</title>
	<link>http://nosyu.egloos.com</link>
	<description>지금의 NoSyu는 'NoSyu의 주저리 주저리'를 통해 과거의 NoSyu와 얘기하고 미래의 NoSyu에게 얘기합니다.</description>
	<language>ko</language>
	<pubDate>Fri, 25 Jul 2008 05:33:40 GMT</pubDate>
	<generator>Egloos</generator>
	<image>
		<title>NoSyu의 주저리 주저리</title>
		<url>http://pds1.egloos.com/logo/1/200608/21/60/c0049460.gif</url>
		<link>http://nosyu.egloos.com</link>
		<width>80</width>
		<height>61</height>
		<description>지금의 NoSyu는 'NoSyu의 주저리 주저리'를 통해 과거의 NoSyu와 얘기하고 미래의 NoSyu에게 얘기합니다.</description>
	</image>
  	<item>
		<title><![CDATA[ SICP Exercise 연습문제 3.65 ]]> </title>
		<link>http://nosyu.egloos.com/4510358</link>
		<guid>http://nosyu.egloos.com/4510358</guid>
		<description>
			<![CDATA[ 
  <p><font face="궁서" size="3">이 문제는 ln2의 power series를 구현하는 방법 중</font></p> <p><font face="궁서" size="3">책에 소개된 세 가지 방법 모두를 해보고 그 시간 차이를 알아보는 것입니다.</font></p> <p>&nbsp;</p> <p align="center"><img src="http://pds6.egloos.com/pds/200807/25/60/c0049460_48895cc682715.png" width="640" height="1049"></p> <p><font face="궁서" size="3">전에 측정하였던 방법으로 해보았으나 잘 되지 않아 조금 무식하게 해보았습니다.^^</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">그 차이를 보면 가속기를 쓰지 않으면 대략 70초 가량이 걸립니다.</font></p> <p><font face="궁서" size="3">그리고 오일러 가속기를 쓰게 되면 10ms정도,</font></p> <p><font face="궁서" size="3">태블로(tableau)를 이용하면 그보다 더 빠르게 수행 결과를 내놓는 것을 알 수 있습니다.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">하지만 그 결과값은 각각 다릅니다.</font></p> <p><font face="궁서" size="3">왜 그러한지는 잘 모르겠습니다.OTL....</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">참조</font></p> <p><font face="궁서" size="3">해럴드 애빌슨, 김재우 역, &lt;컴퓨터 프로그램의 구조와 해석&gt;, 인사이트, 2007, pp. 441</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>; stream<br />
(define true (= 0 0))<br />
(define false (= 1 0))  <p>(define (cons-stream a b)<br />
&nbsp; (cons a (delay b)))<br />
(define the-empty-stream '()) <br />
(define stream-null? null?) <br />
(define (stream-car stream) (car stream))<br />
(define (stream-cdr stream) (force (cdr stream)))  <p>; section 3.5<br />
(define (stream-ref s n)<br />
&nbsp; (if (= n 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-car s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-ref (stream-cdr s) (- n 1))))  <p>(define (stream-for-each proc s)<br />
&nbsp; (if (stream-null? s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'done<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (proc (stream-car s))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-for-each proc (stream-cdr s)))))  <p>(define (display-stream s)<br />
&nbsp; (stream-for-each display-line s))  <p>(define (display-line x)<br />
&nbsp; (newline)<br />
&nbsp; (display x))  <p>(define (stream-enumerate-interval low high)<br />
&nbsp; (if (&gt; low high)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the-empty-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; low<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-enumerate-interval (+ low 1) high))))  <p>(define (stream-filter pred stream)<br />
&nbsp; (cond ((stream-null? stream) the-empty-stream)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((pred (stream-car stream))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream (stream-car stream)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-filter pred<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-cdr stream))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else (stream-filter pred (stream-cdr stream)))))  <p>(define (memo-proc proc)<br />
&nbsp; (let ((already-run? false) (result false))<br />
&nbsp;&nbsp;&nbsp; (lambda ()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (not already-run?)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (set! result (proc))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set! already-run? true)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result))))  <p>(define (scale-stream stream factor)<br />
&nbsp; (stream-map (lambda (x) (* x factor)) stream))  <p>; exercise 3.50<br />
(define (stream-map proc . argstreams)<br />
&nbsp; (if (stream-null? (car argstreams))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the-empty-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (apply proc (map stream-car argstreams))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (apply stream-map<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons proc (map stream-cdr argstreams))))))  <p>;;;SECTION 3.5.2<br />
(define (add-streams s1 s2)<br />
&nbsp; (stream-map + s1 s2))  <p>(define ones (cons-stream 1 ones))<br />
(define integers (cons-stream 1 (add-streams ones integers)))  <p>; exercise 3.54<br />
(define (mul-streams s1 s2)<br />
&nbsp; (stream-map * s1 s2))  <p>; exercise 3.55<br />
(define (partial-sums S)<br />
&nbsp; (cons-stream (stream-car S) (add-streams (stream-cdr S)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (partial-sums S))))  <p>; exercise 3.56<br />
(define (merge s1 s2)<br />
&nbsp; (cond ((stream-null? s1) s2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((stream-null? s2) s1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ((s1car (stream-car s1))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (s2car (stream-car s2)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cond ((&lt; s1car s2car)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s1car (merge (stream-cdr s1) s2)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((&gt; s1car s2car)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s2car (merge s1 (stream-cdr s2))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s1car<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (merge (stream-cdr s1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-cdr s2)))))))))  <p>; print-stream-n<br />
(define (print-stream-n S n)<br />
&nbsp; (define (iter i)<br />
&nbsp;&nbsp;&nbsp; (if (= i n)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'done<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (display (stream-ref S i))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (newline)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (iter (+ i 1)))))<br />
&nbsp; (iter 0))  <p>; exercise 3.59<br />
(define (div-streams s1 s2)<br />
&nbsp; (stream-map / s1 s2))  <p>(define (integrate-series coff_stm)<br />
&nbsp; (let ((integrate_s (cons-stream 1 ; 상수 c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (div-streams coff_stm integers))))<br />
&nbsp;&nbsp;&nbsp; (stream-cdr integrate_s)))  <p>(define exp-series<br />
&nbsp; (cons-stream 1 (integrate-series exp-series)))<br />
(define cosine-series<br />
&nbsp; (cons-stream 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (integrate-series (scale-stream sine-series -1))))<br />
(define sine-series<br />
&nbsp; (cons-stream 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (integrate-series cosine-series)))  <p>; exercise 3.60<br />
(define (mul-series s1 s2)<br />
&nbsp; (cons-stream (* (stream-car s1) (stream-car s2))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (add-streams (mul-series (stream-cdr s1) s2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (scale-stream (stream-cdr s2) (stream-car s1)))))<br />
; exercise 3.61<br />
(define (invert-unit-series S)<br />
&nbsp; (define X<br />
&nbsp;&nbsp;&nbsp; (cons-stream 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (scale-stream (mul-series (stream-cdr S) X) -1)))<br />
&nbsp; X)  <p>; exercise 3.62<br />
; s1 / s2<br />
(define (div-series s1 s2)<br />
&nbsp; (if (= 0 (stream-car s2))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (error "Divide by zero" s2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (mul-series s1 (invert-unit-series s2))))  <p>; exercise 3.63<br />
(define (sqrt-improve guess x)<br />
&nbsp; (average guess (/ x guess)))  <p>(define (average x y)<br />
&nbsp; (/ (+ x y) 2))  <p>(define (sqrt-stream x)<br />
&nbsp; (define guesses<br />
&nbsp;&nbsp;&nbsp; (cons-stream 1.0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-map (lambda (guess)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (sqrt-improve guess x))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; guesses)))<br />
&nbsp; guesses)  <p>; exercise 3.64<br />
(define (stream-limit stm tolerance)<br />
&nbsp; (let ((element1 (stream-car stm)) ; 앞의 원소<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (element2 (stream-car (stream-cdr stm)))) ; 뒤의 원소<br />
&nbsp;&nbsp;&nbsp; (if (&lt; (abs (- element1 element2)) tolerance)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; element2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-limit (stream-cdr stm) tolerance))))<br />
(define (sqrt x tolerance)<br />
&nbsp; (stream-limit (sqrt-stream x) tolerance))  <p>; exercise 3.65<br />
(define ln2-stream<br />
&nbsp; (partial-sums (ln2-summands 1)))<br />
(define (ln2-summands n)<br />
&nbsp; (cons-stream (/ 1.0 n)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-map - (ln2-summands (+ n 1)))))  <p>(define (euler-transform s)<br />
&nbsp; (let ((s0 (stream-ref s 0))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Sn-1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (s1 (stream-ref s 1))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Sn<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (s2 (stream-ref s 2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Sn+1<br />
&nbsp;&nbsp;&nbsp; (cons-stream (- s2 (/ (square (- s2 s1))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (+ s0 (* -2 s1) s2)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (euler-transform (stream-cdr s)))))  <p>(define (make-tableau transform s)<br />
&nbsp; (cons-stream s<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (make-tableau transform<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (transform s))))  <p>(define (accelerated-sequence transform s)<br />
&nbsp; (stream-map stream-car<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (make-tableau transform s)))  <p>(define (square x) (* x x))  <p>;; check time<br />
;(define (timed-test proc)<br />
;&nbsp; (start-test proc (current-milliseconds)))<br />
;<br />
;(define (start-test proc start-time)<br />
;&nbsp; (let ((result (proc)))<br />
;&nbsp;&nbsp;&nbsp; (if result<br />
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (report-timed (- (current-milliseconds) start-time) result)<br />
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (= 0 1))))<br />
;<br />
;(define (report-timed elapsed-time result) <br />
;&nbsp; (display "time : ")<br />
;&nbsp; (display elapsed-time)<br />
;&nbsp; (display ",&nbsp; result : ")<br />
;&nbsp; (display result)<br />
;&nbsp; (newline))  <p>; execute<br />
(define (f)<br />
&nbsp; (let ((start-time 0))<br />
&nbsp;&nbsp;&nbsp; (begin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display "value : ")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set! start-time (current-milliseconds))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display (stream-limit (accelerated-sequence euler-transform ln2-stream) 0.001))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display "&nbsp; time : ")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display (- (current-milliseconds) start-time))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (newline)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display "value : ")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set! start-time (current-milliseconds))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display (stream-limit (euler-transform ln2-stream) 0.001))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display "&nbsp; time : ")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display (- (current-milliseconds) start-time))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (newline)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display "value : ")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set! start-time (current-milliseconds))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display (stream-limit ln2-stream 0.001))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display "&nbsp; time : ")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display (- (current-milliseconds) start-time))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (newline))))<br />
(f)</p>			 ]]> 
		</description>
		<category>in OCW</category>
		<pubDate>Fri, 25 Jul 2008 04:55:35 GMT</pubDate>
		<dc:creator>NoSyu</dc:creator>
	</item>
	<item>
		<title><![CDATA[ SICP Exercise 연습문제 3.64 ]]> </title>
		<link>http://nosyu.egloos.com/4510231</link>
		<guid>http://nosyu.egloos.com/4510231</guid>
		<description>
			<![CDATA[ 
  <p><font face="궁서" size="3">이 문제는 스트림과 허용 오차(tolerance)를 인자로 받아</font></p> <p><font face="궁서" size="3">그 허용 오차보다 작은 차이를 보이는 원소를 내놓는 프로시저를 만드는 문제입니다.</font></p> <p><font face="궁서" size="3">프로시저에 대한 설명이 문제에 적혀있어 거기에 맞춰 만들었습니다.</font></p> <p>&nbsp;</p> <p align="center"><img src="http://pds6.egloos.com/pds/200807/25/60/c0049460_488947691b9a6.png" width="640" height="1049"></p> <p><font face="궁서" size="3">잘 되는군요.^^</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">참조</font></p> <p><font face="궁서" size="3">해럴드 애빌슨, 김재우 역, &lt;컴퓨터 프로그램의 구조와 해석&gt;, 인사이트, 2007, pp. 440</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3"></font>&nbsp;</p> <p>; stream<br />
(define true (= 0 0))<br />
(define false (= 1 0))  <p>(define (cons-stream a b)<br />
&nbsp; (cons a (delay b)))<br />
(define the-empty-stream '()) <br />
(define stream-null? null?) <br />
(define (stream-car stream) (car stream))<br />
(define (stream-cdr stream) (force (cdr stream)))  <p>; section 3.5<br />
(define (stream-ref s n)<br />
&nbsp; (if (= n 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-car s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-ref (stream-cdr s) (- n 1))))  <p>(define (stream-for-each proc s)<br />
&nbsp; (if (stream-null? s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'done<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (proc (stream-car s))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-for-each proc (stream-cdr s)))))  <p>(define (display-stream s)<br />
&nbsp; (stream-for-each display-line s))  <p>(define (display-line x)<br />
&nbsp; (newline)<br />
&nbsp; (display x))  <p>(define (stream-enumerate-interval low high)<br />
&nbsp; (if (&gt; low high)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the-empty-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; low<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-enumerate-interval (+ low 1) high))))  <p>(define (stream-filter pred stream)<br />
&nbsp; (cond ((stream-null? stream) the-empty-stream)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((pred (stream-car stream))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream (stream-car stream)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-filter pred<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-cdr stream))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else (stream-filter pred (stream-cdr stream)))))  <p>(define (memo-proc proc)<br />
&nbsp; (let ((already-run? false) (result false))<br />
&nbsp;&nbsp;&nbsp; (lambda ()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (not already-run?)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (set! result (proc))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set! already-run? true)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result))))  <p>(define (scale-stream stream factor)<br />
&nbsp; (stream-map (lambda (x) (* x factor)) stream))  <p>; exercise 3.50<br />
(define (stream-map proc . argstreams)<br />
&nbsp; (if (stream-null? (car argstreams))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the-empty-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (apply proc (map stream-car argstreams))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (apply stream-map<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons proc (map stream-cdr argstreams))))))  <p>;;;SECTION 3.5.2<br />
(define (add-streams s1 s2)<br />
&nbsp; (stream-map + s1 s2))  <p>(define ones (cons-stream 1 ones))<br />
(define integers (cons-stream 1 (add-streams ones integers)))  <p>; exercise 3.54<br />
(define (mul-streams s1 s2)<br />
&nbsp; (stream-map * s1 s2))  <p>; exercise 3.56<br />
(define (merge s1 s2)<br />
&nbsp; (cond ((stream-null? s1) s2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((stream-null? s2) s1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ((s1car (stream-car s1))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (s2car (stream-car s2)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cond ((&lt; s1car s2car)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s1car (merge (stream-cdr s1) s2)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((&gt; s1car s2car)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s2car (merge s1 (stream-cdr s2))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s1car<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (merge (stream-cdr s1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-cdr s2)))))))))  <p>; print-stream-n<br />
(define (print-stream-n S n)<br />
&nbsp; (define (iter i)<br />
&nbsp;&nbsp;&nbsp; (if (= i n)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'done<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (display (stream-ref S i))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (newline)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (iter (+ i 1)))))<br />
&nbsp; (iter 0))  <p>; exercise 3.59<br />
(define (div-streams s1 s2)<br />
&nbsp; (stream-map / s1 s2))  <p>(define (integrate-series coff_stm)<br />
&nbsp; (let ((integrate_s (cons-stream 1 ; 상수 c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (div-streams coff_stm integers))))<br />
&nbsp;&nbsp;&nbsp; (stream-cdr integrate_s)))  <p>(define exp-series<br />
&nbsp; (cons-stream 1 (integrate-series exp-series)))<br />
(define cosine-series<br />
&nbsp; (cons-stream 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (integrate-series (scale-stream sine-series -1))))<br />
(define sine-series<br />
&nbsp; (cons-stream 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (integrate-series cosine-series)))  <p>; exercise 3.60<br />
(define (mul-series s1 s2)<br />
&nbsp; (cons-stream (* (stream-car s1) (stream-car s2))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (add-streams (mul-series (stream-cdr s1) s2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (scale-stream (stream-cdr s2) (stream-car s1)))))<br />
; exercise 3.61<br />
(define (invert-unit-series S)<br />
&nbsp; (define X<br />
&nbsp;&nbsp;&nbsp; (cons-stream 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (scale-stream (mul-series (stream-cdr S) X) -1)))<br />
&nbsp; X)  <p>; exercise 3.62<br />
; s1 / s2<br />
(define (div-series s1 s2)<br />
&nbsp; (if (= 0 (stream-car s2))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (error "Divide by zero" s2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (mul-series s1 (invert-unit-series s2))))  <p>; exercise 3.63<br />
(define (sqrt-improve guess x)<br />
&nbsp; (average guess (/ x guess)))  <p>(define (average x y)<br />
&nbsp; (/ (+ x y) 2))  <p>(define (sqrt-stream x)<br />
&nbsp; (define guesses<br />
&nbsp;&nbsp;&nbsp; (cons-stream 1.0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-map (lambda (guess)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (sqrt-improve guess x))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; guesses)))<br />
&nbsp; guesses)  <p>; exercise 3.64<br />
(define (stream-limit stm tolerance)<br />
&nbsp; (let ((element1 (stream-car stm)) ; 앞의 원소<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (element2 (stream-car (stream-cdr stm)))) ; 뒤의 원소<br />
&nbsp;&nbsp;&nbsp; (if (&lt; (abs (- element1 element2)) tolerance)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; element2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-limit (stream-cdr stm) tolerance))))<br />
(define (sqrt x tolerance)<br />
&nbsp; (stream-limit (sqrt-stream x) tolerance))  <p>; execute<br />
(sqrt 4 0.00001)<br />
(sqrt 9 0.00001)<br />
(sqrt 16 0.00001)<br />
(sqrt 100 0.00001)<br />
(sqrt 2 0.00001)</p>			 ]]> 
		</description>
		<category>in OCW</category>
		<pubDate>Fri, 25 Jul 2008 03:24:25 GMT</pubDate>
		<dc:creator>NoSyu</dc:creator>
	</item>
	<item>
		<title><![CDATA[ SICP Exercise 연습문제 3.62 ]]> </title>
		<link>http://nosyu.egloos.com/4508634</link>
		<guid>http://nosyu.egloos.com/4508634</guid>
		<description>
			<![CDATA[ 
  <p><font face="궁서" size="3">이 문제는 두 power series를 나누는 프로시저를 구현하는 문제입니다.</font></p> <p><font face="궁서" size="3">이는 분모에 오는 수열의 역수를 구한 뒤 이 둘을 곱하면 됩니다.</font></p> <p>&nbsp;</p> <p align="center"><img src="http://pds8.egloos.com/pds/200807/24/60/c0049460_488845d55fc8a.png" width="640" height="1049"></p> <p><font face="궁서" size="3">잘 되는군요.^^</font></p> <p><font face="궁서" size="3">확인하는데 쓰인 수식은 책에 나오듯이 tangent와 1/(1-x)입니다.</font></p> <p><font face="궁서" size="3">특히 1/(1-x)를 만들 때 분자는 sin²x + cos²x을,</font></p> <p><font face="궁서" size="3">분모에는 ones의 덧셈 역원을 더하여 0의 스트림을 구현하였습니다.</font></p> <p><font face="궁서" size="3">그렇게 복잡하게 만들었음에도 잘 나오더군요.^^</font></p> <p>&nbsp;</p> <p align="center"><img src="http://pds8.egloos.com/pds/200807/24/60/c0049460_488845d5bc459.png" width="429" height="160"></p> <p><font face="궁서" size="3">MATLAB에서 tangent의 power series를 확인해보니 결과가 동일합니다.^^</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">참조</font></p> <p><font face="궁서" size="3">해럴드 애빌슨, 김재우 역, &lt;컴퓨터 프로그램의 구조와 해석&gt;, 인사이트, 2007, pp. 435</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>; stream<br />
(define true (= 0 0))<br />
(define false (= 1 0))  <p>(define (cons-stream a b)<br />
&nbsp; (cons a (delay b)))<br />
(define the-empty-stream '()) <br />
(define stream-null? null?) <br />
(define (stream-car stream) (car stream))<br />
(define (stream-cdr stream) (force (cdr stream)))  <p>; section 3.5<br />
(define (stream-ref s n)<br />
&nbsp; (if (= n 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-car s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-ref (stream-cdr s) (- n 1))))  <p>(define (stream-for-each proc s)<br />
&nbsp; (if (stream-null? s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'done<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (proc (stream-car s))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-for-each proc (stream-cdr s)))))  <p>(define (display-stream s)<br />
&nbsp; (stream-for-each display-line s))  <p>(define (display-line x)<br />
&nbsp; (newline)<br />
&nbsp; (display x))  <p>(define (stream-enumerate-interval low high)<br />
&nbsp; (if (&gt; low high)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the-empty-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; low<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-enumerate-interval (+ low 1) high))))  <p>(define (stream-filter pred stream)<br />
&nbsp; (cond ((stream-null? stream) the-empty-stream)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((pred (stream-car stream))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream (stream-car stream)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-filter pred<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-cdr stream))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else (stream-filter pred (stream-cdr stream)))))  <p>(define (memo-proc proc)<br />
&nbsp; (let ((already-run? false) (result false))<br />
&nbsp;&nbsp;&nbsp; (lambda ()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (not already-run?)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (set! result (proc))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set! already-run? true)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result))))  <p>(define (scale-stream stream factor)<br />
&nbsp; (stream-map (lambda (x) (* x factor)) stream))  <p>; exercise 3.50<br />
(define (stream-map proc . argstreams)<br />
&nbsp; (if (stream-null? (car argstreams))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the-empty-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (apply proc (map stream-car argstreams))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (apply stream-map<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons proc (map stream-cdr argstreams))))))  <p>;;;SECTION 3.5.2<br />
(define (add-streams s1 s2)<br />
&nbsp; (stream-map + s1 s2))  <p>(define ones (cons-stream 1 ones))<br />
(define integers (cons-stream 1 (add-streams ones integers)))  <p>; exercise 3.54<br />
(define (mul-streams s1 s2)<br />
&nbsp; (stream-map * s1 s2))  <p>; exercise 3.56<br />
(define (merge s1 s2)<br />
&nbsp; (cond ((stream-null? s1) s2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((stream-null? s2) s1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ((s1car (stream-car s1))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (s2car (stream-car s2)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cond ((&lt; s1car s2car)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s1car (merge (stream-cdr s1) s2)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((&gt; s1car s2car)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s2car (merge s1 (stream-cdr s2))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s1car<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (merge (stream-cdr s1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-cdr s2)))))))))  <p>; print-stream-n<br />
(define (print-stream-n S n)<br />
&nbsp; (define (iter i)<br />
&nbsp;&nbsp;&nbsp; (if (= i n)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'done<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (display (stream-ref S i))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display "&nbsp; ")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (= (remainder (+ i 1) 10) 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (newline))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (iter (+ i 1)))))<br />
&nbsp; (iter 0))  <p>; exercise 3.59<br />
(define (div-streams s1 s2)<br />
&nbsp; (stream-map / s1 s2))  <p>(define (integrate-series coff_stm)<br />
&nbsp; (let ((integrate_s (cons-stream 1 ; 상수 c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (div-streams coff_stm integers))))<br />
&nbsp;&nbsp;&nbsp; (stream-cdr integrate_s)))  <p>(define exp-series<br />
&nbsp; (cons-stream 1 (integrate-series exp-series)))<br />
(define cosine-series<br />
&nbsp; (cons-stream 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (integrate-series (scale-stream sine-series -1))))<br />
(define sine-series<br />
&nbsp; (cons-stream 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (integrate-series cosine-series)))  <p>; exercise 3.60<br />
(define (mul-series s1 s2)<br />
&nbsp; (cons-stream (* (stream-car s1) (stream-car s2))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (add-streams (mul-series (stream-cdr s1) s2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (scale-stream (stream-cdr s2) (stream-car s1)))))<br />
; exercise 3.61<br />
(define (invert-unit-series S)<br />
&nbsp; (define X<br />
&nbsp;&nbsp;&nbsp; (cons-stream 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (scale-stream (mul-series (stream-cdr S) X) -1)))<br />
&nbsp; X)  <p>; exercise 3.62<br />
; s1 / s2<br />
(define (div-series s1 s2)<br />
&nbsp; (if (= 0 (stream-car s2))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (error "Divide by zero" s2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (mul-series s1 (invert-unit-series s2))))  <p>; execute<br />
(define f1 (div-series sine-series cosine-series))<br />
(print-stream-n cosine-series 10)<br />
(print-stream-n sine-series 10)<br />
(print-stream-n f1 10)<br />
(newline) (newline)  <p>(define constant_one<br />
&nbsp; (add-streams (mul-series sine-series sine-series)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (mul-series cosine-series cosine-series)))<br />
(define one_minus_x<br />
&nbsp; (cons-stream 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream -1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (add-streams ones<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (scale-stream ones -1)))))<br />
(define f2 (div-series constant_one one_minus_x))<br />
(print-stream-n constant_one 10)<br />
(print-stream-n one_minus_x 10)<br />
(print-stream-n f2 10)</p>			 ]]> 
		</description>
		<category>in OCW</category>
		<pubDate>Thu, 24 Jul 2008 09:05:26 GMT</pubDate>
		<dc:creator>NoSyu</dc:creator>
	</item>
	<item>
		<title><![CDATA[ SICP Exercise 연습문제 3.61 ]]> </title>
		<link>http://nosyu.egloos.com/4508625</link>
		<guid>http://nosyu.egloos.com/4508625</guid>
		<description>
			<![CDATA[ 
  <p><font face="궁서" size="3"></font></p> <p><font face="궁서" size="3">이 문제는 상수항이 1인 power series의 역수를 구하는 프로시저를 만드는 문제입니다.</font></p> <p><font face="궁서" size="3">문제에서 어떻게 만들지 설명하기에 거기에 맞춰 구하면 됩니다.</font></p> <p>&nbsp;</p> <p align="center"><img height="1049" alt="c6" src="http://pds9.egloos.com/pds/200807/24/60/c0049460_488844d671230.png" width="640" border="0"></p> <p><font face="궁서" size="3">잘 되는군요.^^</font></p> <p><font face="궁서" size="3">확인한 수식은 e^x의 역수인 e^(-x)와 1/(1-x)의 역수입니다.</font></p> <p>&nbsp;</p> <p align="center"><img height="403" alt="c5" src="http://pds9.egloos.com/pds/200807/24/60/c0049460_488844d70187e.png" width="447" border="0"></p> <p><font face="궁서" size="3">MATLAB에서 확인한 결과입니다.</font></p> <p><font face="궁서" size="3">두 결과가 딱 맞는군요.^^</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">참조</font></p> <p><font face="궁서" size="3">해럴드 애빌슨, 김재우 역, &lt;컴퓨터 프로그램의 구조와 해석&gt;, 인사이트, 2007, pp. 434</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>; stream<br />
(define true (= 0 0))<br />
(define false (= 1 0))  <p>(define (cons-stream a b)<br />
&nbsp; (cons a (delay b)))<br />
(define the-empty-stream '()) <br />
(define stream-null? null?) <br />
(define (stream-car stream) (car stream))<br />
(define (stream-cdr stream) (force (cdr stream)))  <p>; section 3.5<br />
(define (stream-ref s n)<br />
&nbsp; (if (= n 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-car s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-ref (stream-cdr s) (- n 1))))  <p>(define (stream-for-each proc s)<br />
&nbsp; (if (stream-null? s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'done<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (proc (stream-car s))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-for-each proc (stream-cdr s)))))  <p>(define (display-stream s)<br />
&nbsp; (stream-for-each display-line s))  <p>(define (display-line x)<br />
&nbsp; (newline)<br />
&nbsp; (display x))  <p>(define (stream-enumerate-interval low high)<br />
&nbsp; (if (&gt; low high)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the-empty-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; low<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-enumerate-interval (+ low 1) high))))  <p>(define (stream-filter pred stream)<br />
&nbsp; (cond ((stream-null? stream) the-empty-stream)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((pred (stream-car stream))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream (stream-car stream)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-filter pred<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-cdr stream))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else (stream-filter pred (stream-cdr stream)))))  <p>(define (memo-proc proc)<br />
&nbsp; (let ((already-run? false) (result false))<br />
&nbsp;&nbsp;&nbsp; (lambda ()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (not already-run?)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (set! result (proc))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set! already-run? true)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result))))  <p>(define (scale-stream stream factor)<br />
&nbsp; (stream-map (lambda (x) (* x factor)) stream))  <p>; exercise 3.50<br />
(define (stream-map proc . argstreams)<br />
&nbsp; (if (stream-null? (car argstreams))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the-empty-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (apply proc (map stream-car argstreams))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (apply stream-map<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons proc (map stream-cdr argstreams))))))  <p>;;;SECTION 3.5.2<br />
(define (add-streams s1 s2)<br />
&nbsp; (stream-map + s1 s2))  <p>(define ones (cons-stream 1 ones))<br />
(define integers (cons-stream 1 (add-streams ones integers)))  <p>; exercise 3.54<br />
(define (mul-streams s1 s2)<br />
&nbsp; (stream-map * s1 s2))  <p>; exercise 3.56<br />
(define (merge s1 s2)<br />
&nbsp; (cond ((stream-null? s1) s2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((stream-null? s2) s1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ((s1car (stream-car s1))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (s2car (stream-car s2)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cond ((&lt; s1car s2car)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s1car (merge (stream-cdr s1) s2)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((&gt; s1car s2car)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s2car (merge s1 (stream-cdr s2))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s1car<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (merge (stream-cdr s1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-cdr s2)))))))))  <p>; print-stream-n<br />
(define (print-stream-n S n)<br />
&nbsp; (define (iter i)<br />
&nbsp;&nbsp;&nbsp; (if (= i n)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'done<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (display (stream-ref S i))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display "&nbsp; ")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (= (remainder (+ i 1) 10) 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (newline))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (iter (+ i 1)))))<br />
&nbsp; (iter 0))  <p>; exercise 3.59<br />
(define (div-streams s1 s2)<br />
&nbsp; (stream-map / s1 s2))  <p>(define (integrate-series coff_stm)<br />
&nbsp; (let ((integrate_s (cons-stream 1 ; 상수 c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (div-streams coff_stm integers))))<br />
&nbsp;&nbsp;&nbsp; (stream-cdr integrate_s)))  <p>(define exp-series<br />
&nbsp; (cons-stream 1 (integrate-series exp-series)))<br />
(define cosine-series<br />
&nbsp; (cons-stream 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (integrate-series (scale-stream sine-series -1))))<br />
(define sine-series<br />
&nbsp; (cons-stream 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (integrate-series cosine-series)))  <p>; exercise 3.60<br />
(define (mul-series s1 s2)<br />
&nbsp; (cons-stream (* (stream-car s1) (stream-car s2))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (add-streams (mul-series (stream-cdr s1) s2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (scale-stream (stream-cdr s2) (stream-car s1)))))<br />
; exercise 3.61<br />
(define (invert-unit-series S)<br />
&nbsp; (define X<br />
&nbsp;&nbsp;&nbsp; (cons-stream 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (scale-stream (mul-series (stream-cdr S) X) -1)))<br />
&nbsp; X)  <p>; execute<br />
(define f1 (invert-unit-series exp-series))<br />
(print-stream-n exp-series 6)<br />
(print-stream-n f1 6)<br />
(newline) (newline)  <p>(define f2 ones)<br />
(print-stream-n f2 6)<br />
(define invert_f2 (invert-unit-series f2))<br />
(print-stream-n invert_f2 6)</p>			 ]]> 
		</description>
		<category>in OCW</category>
		<pubDate>Thu, 24 Jul 2008 09:01:11 GMT</pubDate>
		<dc:creator>NoSyu</dc:creator>
	</item>
	<item>
		<title><![CDATA[ SICP Exercise 연습문제 3.60 ]]> </title>
		<link>http://nosyu.egloos.com/4508501</link>
		<guid>http://nosyu.egloos.com/4508501</guid>
		<description>
			<![CDATA[ 
  <p><font face="궁서" size="3">이 문제는 두 power series의 곱을 구하는 프로시저를 작성하는 문제입니다.</font></p> <p><font face="궁서" size="3">빈칸을 채워 넣으면 되는 간단한 문제이지만,</font></p> <p><font face="궁서" size="3">어제부터 오늘까지 아무리 생각해도 틀에 맞춰 할 수 없었기에</font></p> <p><font face="궁서" size="3">제가 스트림에 대한 이해가 많이 부족하다는 것을 느꼈습니다.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">결국 '이렇게 하면 되지 않을까?'와</font></p> <p><font face="궁서" size="3">'덧셈이 점점 증가하니 mul-series를 부르는 것과</font></p> <p><font face="궁서" size="3">나머지를 처리하는 프로시저를 불러 이를 더하면 되지 않을까?'라는 생각으로</font></p> <p><font face="궁서" size="3">여러 번 프로시저를 돌려 값을 확인하여 답을 구했습니다.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">그렇게 답을 구했음에도 왜 저 코드가 맞는지는 이해가 되지 않습니다.OTL....</font></p> <p><font face="궁서" size="3">스트림은 재미있으면서도 새로운 구조라 그런지 제 머리에 인식이 잘 안되네요.ㅜ</font></p> <p>&nbsp;</p> <p align="center"><img src="http://pds8.egloos.com/pds/200807/24/60/c0049460_4888367077640.png" width="640" height="1049"></p> <p><font face="궁서" size="3">제일 처음에 위와 같은 코드를 짰습니다.</font></p> <p><font face="궁서" size="3">쉽게 생각한 것이지요.</font></p> <p><font face="궁서" size="3">그런데 sin²x + cos²x의 값이 1이 나왔기에 맞는 줄 알았습니다.</font></p> <p><font face="궁서" size="3">하지만 이상하다는 생각에 e^x를 두 번 곱한 값을 출력하도록 하였습니다.</font></p> <p>&nbsp;</p> <p align="center"><img src="http://pds8.egloos.com/pds/200807/24/60/c0049460_488836712a36b.png" width="446" height="250"></p> <p><font face="궁서" size="3">위의 결과는 MATLAB을 이용해서 얻었습니다.</font></p> <p><font face="궁서" size="3">즉, e^2x의 값이 틀렸다는 것을 알 수 있었습니다.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">그 이후로 이렇게 맞춰보고 저렇게 맞춰보고 연습장에 적어가며 답을 맞춰보았습니다.</font></p> <p><font face="궁서" size="3">그러다 결국 답에 도착하였습니다.</font></p> <p>&nbsp;</p> <p align="center"><img src="http://pds8.egloos.com/pds/200807/24/60/c0049460_488836716c1d7.png" width="640" height="1049"></p> <p><font face="궁서" size="3">두 개 모두 맞다는 것을 확인할 수 있습니다.</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">이 문제를 맞추는데 최종적으로 다른 이의 답이 도움이 되었습니다.</font></p> <p><font face="궁서" size="3">'<a href="http://blog.goo.ne.jp/msyksphinz/e/4fa3b04a82ea33b99ab3711146e8153f">SICP Exercise 3.60.</a>'</font></p> <p><font face="궁서" size="3">이에 감사의 인사를 드립니다.</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">참조</font></p> <p><font face="궁서" size="3">해럴드 애빌슨, 김재우 역, &lt;컴퓨터 프로그램의 구조와 해석&gt;, 인사이트, 2007, pp. 434</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>; stream<br />
(define true (= 0 0))<br />
(define false (= 1 0))  <p>(define (cons-stream a b)<br />
&nbsp; (cons a (delay b)))<br />
(define the-empty-stream '()) <br />
(define stream-null? null?) <br />
(define (stream-car stream) (car stream))<br />
(define (stream-cdr stream) (force (cdr stream)))  <p>; section 3.5<br />
(define (stream-ref s n)<br />
&nbsp; (if (= n 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-car s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-ref (stream-cdr s) (- n 1))))  <p>(define (stream-for-each proc s)<br />
&nbsp; (if (stream-null? s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'done<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (proc (stream-car s))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-for-each proc (stream-cdr s)))))  <p>(define (display-stream s)<br />
&nbsp; (stream-for-each display-line s))  <p>(define (display-line x)<br />
&nbsp; (newline)<br />
&nbsp; (display x))  <p>(define (stream-enumerate-interval low high)<br />
&nbsp; (if (&gt; low high)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the-empty-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; low<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-enumerate-interval (+ low 1) high))))  <p>(define (stream-filter pred stream)<br />
&nbsp; (cond ((stream-null? stream) the-empty-stream)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((pred (stream-car stream))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream (stream-car stream)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-filter pred<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-cdr stream))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else (stream-filter pred (stream-cdr stream)))))  <p>(define (memo-proc proc)<br />
&nbsp; (let ((already-run? false) (result false))<br />
&nbsp;&nbsp;&nbsp; (lambda ()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (not already-run?)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (set! result (proc))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set! already-run? true)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result))))  <p>(define (scale-stream stream factor)<br />
&nbsp; (stream-map (lambda (x) (* x factor)) stream))  <p>; exercise 3.50<br />
(define (stream-map proc . argstreams)<br />
&nbsp; (if (stream-null? (car argstreams))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the-empty-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (apply proc (map stream-car argstreams))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (apply stream-map<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons proc (map stream-cdr argstreams))))))  <p>;;;SECTION 3.5.2<br />
(define (add-streams s1 s2)<br />
&nbsp; (stream-map + s1 s2))  <p>(define ones (cons-stream 1 ones))<br />
(define integers (cons-stream 1 (add-streams ones integers)))  <p>; exercise 3.54<br />
(define (mul-streams s1 s2)<br />
&nbsp; (stream-map * s1 s2))  <p>; exercise 3.56<br />
(define (merge s1 s2)<br />
&nbsp; (cond ((stream-null? s1) s2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((stream-null? s2) s1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ((s1car (stream-car s1))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (s2car (stream-car s2)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cond ((&lt; s1car s2car)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s1car (merge (stream-cdr s1) s2)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((&gt; s1car s2car)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s2car (merge s1 (stream-cdr s2))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s1car<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (merge (stream-cdr s1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-cdr s2)))))))))  <p>; print-stream-n<br />
(define (print-stream-n S n)<br />
&nbsp; (define (iter i)<br />
&nbsp;&nbsp;&nbsp; (if (= i n)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'done<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (display (stream-ref S i))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display "&nbsp; ")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (= (remainder (+ i 1) 10) 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (newline))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (iter (+ i 1)))))<br />
&nbsp; (iter 0))  <p>; exercise 3.59<br />
(define (div-streams s1 s2)<br />
&nbsp; (stream-map / s1 s2))  <p>(define (integrate-series coff_stm)<br />
&nbsp; (let ((integrate_s (cons-stream 1 ; 상수 c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (div-streams coff_stm integers))))<br />
&nbsp;&nbsp;&nbsp; (stream-cdr integrate_s)))  <p>(define exp-series<br />
&nbsp; (cons-stream 1 (integrate-series exp-series)))<br />
(define cosine-series<br />
&nbsp; (cons-stream 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (integrate-series (scale-stream sine-series -1))))<br />
(define sine-series<br />
&nbsp; (cons-stream 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (integrate-series cosine-series)))  <p>; exercise 3.60<br />
(define (mul-series s1 s2)<br />
&nbsp; (cons-stream (* (stream-car s1) (stream-car s2))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (add-streams (mul-series (stream-cdr s1) s2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (scale-stream (stream-cdr s2) (stream-car s1)))))<br />
; execute<br />
(define a (add-streams (mul-series sine-series sine-series)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (mul-series cosine-series cosine-series)))<br />
(print-stream-n cosine-series 10)<br />
(print-stream-n sine-series 10)<br />
(newline)<br />
(print-stream-n a 10)<br />
(newline) (newline)  <p>(define b (mul-series exp-series exp-series))<br />
(print-stream-n exp-series 6)<br />
(newline)<br />
(print-stream-n b 6)</p>			 ]]> 
		</description>
		<category>in OCW</category>
		<pubDate>Thu, 24 Jul 2008 07:59:46 GMT</pubDate>
		<dc:creator>NoSyu</dc:creator>
	</item>
	<item>
		<title><![CDATA[ SICP Exercise 연습문제 3.59 ]]> </title>
		<link>http://nosyu.egloos.com/4506734</link>
		<guid>http://nosyu.egloos.com/4506734</guid>
		<description>
			<![CDATA[ 
  <p><font face="궁서" size="3">이 문제는 아주 재미있는 문제입니다.</font></p> <p><font face="궁서" size="3">power series를 스트림으로 구현하는데,</font></p> <p><font face="궁서" size="3">특히 b번이 아주 흥미로운 결과를 보여주었습니다.</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">a. 수열을 적분하는 프로시저를 만드는 문제입니다.</font></p> <p><font face="궁서" size="3">간단히 integer 스트림과 계수 스트림을 나누는 것으로 해결하였습니다.</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">b. cosine과 sine 함수를 정의하는 문제입니다.</font></p> <p><font face="궁서" size="3">예제로 나온 exponential 함수의 정의는 자기 자신을 적분하는 것으로 나와있습니다.</font></p> <p><font face="궁서" size="3">왜냐하면 exponential 함수는 미분을 하나 적분을 하나 자기 자신이기 때문입니다.</font></p> <p><font face="궁서" size="3">(물론 부정적분을 하면 상수가 나오겠죠.)</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">이에 맞춰 cosine과 sine 함수 정의에 각각을 적분하는 것으로 끼워넣었습니다.</font></p> <p><font face="궁서" size="3">처음에는 잘 되겠는가 싶었으나 의외로 깔끔하게 답이 나왔습니다.</font></p> <p>&nbsp;</p> <p align="center"><img src="http://pds9.egloos.com/pds/200807/23/60/c0049460_48871e769657e.png" width="640" height="1049"></p> <p><font face="궁서" size="3">서로가 서로를 정의하는데 쓰이고 있음에도 이렇게 잘 나오다니... 놀랐습니다.^^</font></p> <p><font face="궁서" size="3">스트림을 사용하면 이런 것도 가능하군요.^^</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">참조</font></p> <p><font face="궁서" size="3">해럴드 애빌슨, 김재우 역, &lt;컴퓨터 프로그램의 구조와 해석&gt;, 인사이트, 2007, pp. 432</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>; stream<br />
(define true (= 0 0))<br />
(define false (= 1 0))  <p>(define (cons-stream a b)<br />
&nbsp; (cons a (delay b)))<br />
(define the-empty-stream '()) <br />
(define stream-null? null?) <br />
(define (stream-car stream) (car stream))<br />
(define (stream-cdr stream) (force (cdr stream)))  <p>; section 3.5<br />
(define (stream-ref s n)<br />
&nbsp; (if (= n 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-car s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-ref (stream-cdr s) (- n 1))))  <p>(define (stream-for-each proc s)<br />
&nbsp; (if (stream-null? s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'done<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (proc (stream-car s))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-for-each proc (stream-cdr s)))))  <p>(define (display-stream s)<br />
&nbsp; (stream-for-each display-line s))  <p>(define (display-line x)<br />
&nbsp; (newline)<br />
&nbsp; (display x))  <p>(define (stream-enumerate-interval low high)<br />
&nbsp; (if (&gt; low high)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the-empty-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; low<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-enumerate-interval (+ low 1) high))))  <p>(define (stream-filter pred stream)<br />
&nbsp; (cond ((stream-null? stream) the-empty-stream)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((pred (stream-car stream))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream (stream-car stream)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-filter pred<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-cdr stream))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else (stream-filter pred (stream-cdr stream)))))  <p>(define (memo-proc proc)<br />
&nbsp; (let ((already-run? false) (result false))<br />
&nbsp;&nbsp;&nbsp; (lambda ()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (not already-run?)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (set! result (proc))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set! already-run? true)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result))))  <p>(define (scale-stream stream factor)<br />
&nbsp; (stream-map (lambda (x) (* x factor)) stream))  <p>; exercise 3.50<br />
(define (stream-map proc . argstreams)<br />
&nbsp; (if (stream-null? (car argstreams))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the-empty-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (apply proc (map stream-car argstreams))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (apply stream-map<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons proc (map stream-cdr argstreams))))))  <p>;;;SECTION 3.5.2<br />
(define (add-streams s1 s2)<br />
&nbsp; (stream-map + s1 s2))  <p>(define ones (cons-stream 1 ones))<br />
(define integers (cons-stream 1 (add-streams ones integers)))  <p>; exercise 3.54<br />
(define (mul-streams s1 s2)<br />
&nbsp; (stream-map * s1 s2))  <p>; exercise 3.56<br />
(define (merge s1 s2)<br />
&nbsp; (cond ((stream-null? s1) s2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((stream-null? s2) s1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ((s1car (stream-car s1))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (s2car (stream-car s2)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cond ((&lt; s1car s2car)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s1car (merge (stream-cdr s1) s2)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((&gt; s1car s2car)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s2car (merge s1 (stream-cdr s2))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s1car<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (merge (stream-cdr s1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-cdr s2)))))))))  <p>; answer<br />
(define (print-stream-n S n)<br />
&nbsp; (define (iter i)<br />
&nbsp;&nbsp;&nbsp; (if (= i n)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'done<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (display (stream-ref S i))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display "&nbsp; ")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (= (remainder (+ i 1) 10) 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (newline))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (iter (+ i 1)))))<br />
&nbsp; (iter 0))  <p>; a<br />
(define (div-streams s1 s2)<br />
&nbsp; (stream-map / s1 s2))  <p>(define (integrate-series coff_stm)<br />
&nbsp; (let ((integrate_s (cons-stream 1 ; 상수 c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (div-streams coff_stm integers))))<br />
&nbsp;&nbsp;&nbsp; (stream-cdr integrate_s)))  <p>; execute<br />
(define a (scale-stream integers 10))<br />
(define b (integrate-series a))<br />
(print-stream-n a 10)<br />
(print-stream-n b 10)<br />
(newline)  <p>; b<br />
(define exp-series<br />
&nbsp; (cons-stream 1 (integrate-series exp-series)))<br />
(define cosine-series<br />
&nbsp; (cons-stream 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (integrate-series (scale-stream sine-series -1))))<br />
(define sine-series<br />
&nbsp; (cons-stream 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (integrate-series cosine-series)))  <p>; execute<br />
(print-stream-n exp-series 10)<br />
(print-stream-n cosine-series 10)<br />
(print-stream-n sine-series 10)</p>			 ]]> 
		</description>
		<category>in OCW</category>
		<pubDate>Wed, 23 Jul 2008 12:05:11 GMT</pubDate>
		<dc:creator>NoSyu</dc:creator>
	</item>
	<item>
		<title><![CDATA[ SICP Exercise 연습문제 3.58 ]]> </title>
		<link>http://nosyu.egloos.com/4506716</link>
		<guid>http://nosyu.egloos.com/4506716</guid>
		<description>
			<![CDATA[ 
  <p><font face="궁서" size="3">이 문제에서 재미있는 프로시저 하나를 얘기합니다.</font></p> <p>&nbsp;</p> <p align="center"><img src="http://pds9.egloos.com/pds/200807/23/60/c0049460_48871ce0bc226.png" width="640" height="127"></p> <p><font face="궁서" size="3">해당 프로시저를 처음 봤을 때 무슨 프로시저인가 고민했습니다.</font></p> <p><font face="궁서" size="3">왜 num에 radix를 곱하는지, 다음으로 넘길 때 왜 remainder를 써서 나머지를 넘기는지</font></p> <p><font face="궁서" size="3">그 이유를 알 수 없었습니다.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">그래서 책에 나오는 예제인 (expand 1 7 10)을 따라 해보았습니다.</font></p> <p><font face="궁서" size="3">1 4 2 8 5 7 1 4 2 8 5 7 1....</font></p> <p><font face="궁서" size="3">해당 연산을 하면서 어디서 많이 해보던 느낌이 많이 들었습니다.</font></p> <p><font face="궁서" size="3">몫을 기록하고 나머지에 10을 곱해 다시 몫을 기록하는 행위...</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">다음 예제인 (expand 3 8 10)을 따라 해보았습니다.</font></p> <p><font face="궁서" size="3">3 7 5 0 0 0 0 0 0 0...</font></p> <p><font face="궁서" size="3">여기까지 해보고나서 무엇인지 알게 되었습니다.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">분수를 소수로 바꾸는 연산!</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">처음 예제는 1/7을 소수 0.1428571428571...로 표현한 것이고,</font></p> <p><font face="궁서" size="3">두 번재 예제는 3/8을 소수 0.375로 표현한 것입니다.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">이런 방법은 나눗셈 표기법으로 구하는 것과 동일합니다.</font></p> <p align="center"><img src="http://pds8.egloos.com/pds/200807/23/60/c0049460_48871ce1038b5.gif" width="137" height="99"></p> <p align="center"><font face="궁서" size="3">출처 : <a href="http://primary.edupia.com/schoolbook/math/sub.asp?p_nYear=6&amp;p_subcode=ma&amp;p_nTerm=2&amp;p_nCategoryID=1186&amp;nConID=3210">3. 소수의 나눗셈</a></font></p> <p><font face="궁서" size="3">즉, 몫을 위에 적고 남은 나머지에 10을 곱해 다시 몫을 구하는 것과 동일합니다.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">어렸을때부터 언제나 하였던 것임에도 이렇게 보니 신기하네요.</font></p> <p><font face="궁서" size="3">그만큼 창의성이 없다는 뜻인지도...OTL.....</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">참조</font></p> <p><font face="궁서" size="3">해럴드 애빌슨, 김재우 역, &lt;컴퓨터 프로그램의 구조와 해석&gt;, 인사이트, 2007, pp. 432</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>; stream<br />
(define true (= 0 0))<br />
(define false (= 1 0))  <p>(define (cons-stream a b)<br />
&nbsp; (cons a (delay b)))<br />
(define the-empty-stream '()) <br />
(define stream-null? null?) <br />
(define (stream-car stream) (car stream))<br />
(define (stream-cdr stream) (force (cdr stream)))  <p>; section 3.5<br />
(define (stream-ref s n)<br />
&nbsp; (if (= n 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-car s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-ref (stream-cdr s) (- n 1))))  <p>(define (stream-for-each proc s)<br />
&nbsp; (if (stream-null? s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'done<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (proc (stream-car s))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-for-each proc (stream-cdr s)))))  <p>(define (display-stream s)<br />
&nbsp; (stream-for-each display-line s))  <p>(define (display-line x)<br />
&nbsp; (newline)<br />
&nbsp; (display x))  <p>(define (stream-enumerate-interval low high)<br />
&nbsp; (if (&gt; low high)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the-empty-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; low<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-enumerate-interval (+ low 1) high))))  <p>(define (stream-filter pred stream)<br />
&nbsp; (cond ((stream-null? stream) the-empty-stream)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((pred (stream-car stream))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream (stream-car stream)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-filter pred<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-cdr stream))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else (stream-filter pred (stream-cdr stream)))))  <p>(define (memo-proc proc)<br />
&nbsp; (let ((already-run? false) (result false))<br />
&nbsp;&nbsp;&nbsp; (lambda ()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (not already-run?)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (set! result (proc))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set! already-run? true)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result))))  <p>(define (scale-stream stream factor)<br />
&nbsp; (stream-map (lambda (x) (* x factor)) stream))  <p>; exercise 3.50<br />
(define (stream-map proc . argstreams)<br />
&nbsp; (if (stream-null? (car argstreams))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the-empty-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (apply proc (map stream-car argstreams))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (apply stream-map<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons proc (map stream-cdr argstreams))))))  <p>;;;SECTION 3.5.2<br />
(define (add-streams s1 s2)<br />
&nbsp; (stream-map + s1 s2))  <p>(define ones (cons-stream 1 ones))<br />
(define integers (cons-stream 1 (add-streams ones integers)))  <p>; exercise 3.54<br />
(define (mul-streams s1 s2)<br />
&nbsp; (stream-map * s1 s2))  <p>; exercise 3.56<br />
(define (merge s1 s2)<br />
&nbsp; (cond ((stream-null? s1) s2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((stream-null? s2) s1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ((s1car (stream-car s1))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (s2car (stream-car s2)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cond ((&lt; s1car s2car)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s1car (merge (stream-cdr s1) s2)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((&gt; s1car s2car)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s2car (merge s1 (stream-cdr s2))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s1car<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (merge (stream-cdr s1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-cdr s2)))))))))  <p>; answer<br />
(define (print-stream-n S n)<br />
&nbsp; (define (iter i)<br />
&nbsp;&nbsp;&nbsp; (if (= i n)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'done<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (display (stream-ref S i))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display "&nbsp; ")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (= (remainder (+ i 1) 10) 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (newline))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (iter (+ i 1)))))<br />
&nbsp; (iter 0))  <p>(define (expands num den radix)<br />
&nbsp; (cons-stream<br />
&nbsp;&nbsp; (quotient (* num radix) den)<br />
&nbsp;&nbsp; (expands (remainder (* num radix) den) den radix)))  <p>; execute<br />
(define a (expands 1 7 10))<br />
(define b (expands 3 8 10))<br />
(print-stream-n a 10)<br />
(newline) (newline)<br />
(print-stream-n b 10)</p>			 ]]> 
		</description>
		<category>in OCW</category>
		<pubDate>Wed, 23 Jul 2008 11:58:25 GMT</pubDate>
		<dc:creator>NoSyu</dc:creator>
	</item>
	<item>
		<title><![CDATA[ SICP Exercise 연습문제 3.57 ]]> </title>
		<link>http://nosyu.egloos.com/4506604</link>
		<guid>http://nosyu.egloos.com/4506604</guid>
		<description>
			<![CDATA[ 
  <p><font face="궁서" size="3">이 문제는 피보나치 수를 구하는데 얼마나 많은 덧셈을 하는지 확인하는 문제입니다.</font></p> <p>&nbsp;</p> <p align="center"><img src="http://pds8.egloos.com/pds/200807/19/60/c0049460_4881d3f3061e6.png"></p> <p><font face="궁서" size="3">위와 같은 방법으로 피보나치 수를 구합니다.</font></p> <p><font face="궁서" size="3">따라서 n번재 피보나치 수열을 구하려면 n-1번의 덧셈이 필요합니다.</font></p> <p>&nbsp;</p> <p align="center"><img src="http://pds6.egloos.com/pds/200807/23/60/c0049460_48870ea82c77b.png" width="640" height="1049"></p> <p><font face="궁서" size="3">살펴보니 10번째 값을 구할 때 add_execute가 9번 나왔습니다.</font></p> <p><font face="궁서" size="3">즉, 제 예상이 맞는 듯싶습니다.^^</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">재미있는 것은 10번째 값을 구할 때 0부터 9까지 모두 구합니다.</font></p> <p><font face="궁서" size="3">따라서 그 다음으로 20번째 값을 구할 때 10번만 덧셈합니다.</font></p> <p><font face="궁서" size="3">즉, 11번부터 20까지 덧셈을 행하는 것입니다.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">그럼 이렇게 값을 저장하는 것이 아닌 방법이라면 어떻게 되는지 생각해보았습니다.</font></p> <p>&nbsp;</p> <p align="center"><img src="http://pds8.egloos.com/pds/200807/23/60/c0049460_48870ea896a58.png" width="418" height="134"></p> <p><font face="궁서" size="3">피보나치 수는 위와 같은 나무꼴(tree)를 그립니다.</font></p> <p><font face="궁서" size="3">이는 Full binary tree와 비슷합니다.</font></p> <p><font face="궁서" size="3">그리고 fibs(n)은 n-1 height를 가집니다.</font></p> <p><font face="궁서" size="3">따라서 2^(n-1)개의 terminal vertex를 가지고, 총 vertex의 개수는 (2^n) - 1입니다.</font></p> <p><font face="궁서" size="3">그렇기에 덧셈의 수가 지수 비례로 늘어납니다.</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">여전히 코드를 보고 수행 시간을 판단하는 것은 어렵습니다.</font></p> <p><font face="궁서" size="3">2학기 때 자료구조를 듣는데 걱정되네요.ㅜㅜ</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">참조</font></p> <p><font face="궁서" size="3">해럴드 애빌슨, 김재우 역, &lt;컴퓨터 프로그램의 구조와 해석&gt;, 인사이트, 2007, pp. 432</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>; stream<br />
(define true (= 0 0))<br />
(define false (= 1 0))  <p>(define (cons-stream a b)<br />
&nbsp; (cons a (delay b)))<br />
(define the-empty-stream '()) <br />
(define stream-null? null?) <br />
(define (stream-car stream) (car stream))<br />
(define (stream-cdr stream) (force (cdr stream)))  <p>; section 3.5<br />
(define (stream-ref s n)<br />
&nbsp; (if (= n 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-car s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-ref (stream-cdr s) (- n 1))))  <p>(define (stream-for-each proc s)<br />
&nbsp; (if (stream-null? s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'done<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (proc (stream-car s))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-for-each proc (stream-cdr s)))))  <p>(define (display-stream s)<br />
&nbsp; (stream-for-each display-line s))  <p>(define (display-line x)<br />
&nbsp; (newline)<br />
&nbsp; (display x))  <p>(define (stream-enumerate-interval low high)<br />
&nbsp; (if (&gt; low high)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the-empty-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; low<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-enumerate-interval (+ low 1) high))))  <p>(define (stream-filter pred stream)<br />
&nbsp; (cond ((stream-null? stream) the-empty-stream)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((pred (stream-car stream))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream (stream-car stream)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-filter pred<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-cdr stream))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else (stream-filter pred (stream-cdr stream)))))  <p>(define (memo-proc proc)<br />
&nbsp; (let ((already-run? false) (result false))<br />
&nbsp;&nbsp;&nbsp; (lambda ()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (not already-run?)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (set! result (proc))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set! already-run? true)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result))))  <p>(define (scale-stream stream factor)<br />
&nbsp; (stream-map (lambda (x) (* x factor)) stream))  <p>; exercise 3.50<br />
(define (stream-map proc . argstreams)<br />
&nbsp; (if (stream-null? (car argstreams))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the-empty-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (apply proc (map stream-car argstreams))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (apply stream-map<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons proc (map stream-cdr argstreams))))))  <p>;;;SECTION 3.5.2<br />
(define (add-streams s1 s2)<br />
&nbsp; ; print count add call<br />
&nbsp; (define (add a b)<br />
&nbsp;&nbsp;&nbsp; (display 'add_execute)<br />
&nbsp;&nbsp;&nbsp; (newline)<br />
&nbsp;&nbsp;&nbsp; (+ a b))<br />
&nbsp; (stream-map add s1 s2))  <p>(define ones (cons-stream 1 ones))<br />
(define integers (cons-stream 1 (add-streams ones integers)))  <p>; exercise 3.54<br />
(define (mul-streams s1 s2)<br />
&nbsp; (stream-map * s1 s2))  <p>; exercise 3.56<br />
(define (merge s1 s2)<br />
&nbsp; (cond ((stream-null? s1) s2)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((stream-null? s2) s1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (let ((s1car (stream-car s1))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (s2car (stream-car s2)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cond ((&lt; s1car s2car)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s1car (merge (stream-cdr s1) s2)))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((&gt; s1car s2car)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s2car (merge s1 (stream-cdr s2))))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream s1car<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (merge (stream-cdr s1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (stream-cdr s2)))))))))  <p>; answer<br />
(define fibs<br />
&nbsp; (cons-stream 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cons-stream 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (add-streams (stream-cdr fibs)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fibs))))  <p>(define (print-stream-n S n)<br />
&nbsp; (define (iter i)<br />
&nbsp;&nbsp;&nbsp; (if (= i n)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'done<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (begin (display (stream-ref S i))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (display "&nbsp; ")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (= (remainder (+ i 1) 10) 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (newline))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (iter (+ i 1)))))<br />
&nbsp; (iter 0))  <p>;(print-stream-n fibs 10)<br />
(display (stream-ref fibs 10))<br />
(newline) (newline)<br />
(display (stream-ref fibs 20))</p>			 ]]> 
		</description>
		<category>in OCW</category>
		<pubDate>Wed, 23 Jul 2008 10:57:44 GMT</pubDate>
		<dc:creator>NoSyu</dc:creator>
	</item>
	<item>
		<title><![CDATA[ INTJ는 My Way ]]> </title>
		<link>http://nosyu.egloos.com/4500471</link>
		<guid>http://nosyu.egloos.com/4500471</guid>
		<description>
			<![CDATA[ 
  <p><font face="궁서" size="3">대학교 1학년 때 MBTI 검사를 하여 INTJ 유형이라는 결과를 받았습니다.</font></p> <p><font face="궁서" size="3">그리고 거기에 대해 상담을 받고 자료를 받았지만, 잘 기억이 나지 않네요.^^;;;</font></p> <p><font face="궁서" size="3">그러다 <a href="http://uniqueness.egloos.com">Unique</a>님의 '<a href="http://uniqueness.egloos.com/4499285">MBTI</a>'에서 MBTI에 관한 방송 자료를 얻을 수 있었습니다.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3"><a href="http://www.cgntv.net/cgn_player/player.htm?id=44576&amp;mode=content_view&amp;gotopage=&amp;txtprogram=&amp;bit=medium">과학자 INTJ</a></font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">이 방송은 아이의 성격유형에 따라 어떻게 지도해야하는지 조언하는 프로그램입니다.</font></p> <p><font face="궁서" size="3">여기서 해당 유형에 대해 여러 얘기를 하는데 재미있는 이야기 하나 들었습니다.</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">예전에 저희 연구소의 어떤 애가 세미나를 하려고</font></p> <p><font face="궁서" size="3">학교에서 다른 곳으로 무거운 가방을 들고 가고 있었어요.</font></p> <p><font face="궁서" size="3">그런데 뒤에 오던 애들은 짐이 너무 많으니까 차에 짐을 실어서 가다보니까</font></p> <p><font face="궁서" size="3">그 친구가 먼저 무거운 가방을 들고 가는 것을 보았어요.</font></p> <p><font face="궁서" size="3">그 모습을 보고 "빨리 타라. 이거 타고 같이 가자."라고 했더니</font></p> <p><font face="궁서" size="3">괜찮다면서 안 타고 갔습니다.</font></p> <p><font face="궁서" size="3">자꾸 타라고 해도 너무나 안 타겠다고 하자 오히려 타라고 한 사람이 민망해져</font></p> <p><font face="궁서" size="3">자기들끼리 먼저 가면서 '왜 안타죠? 이상해요.'라고 얘기했습니다.</font></p> <p><font face="궁서" size="3">물론 타면 좋을텐데 그 순간에 자기가 몰두하고 있거나 어떤 생각에 빠져있으면</font></p> <p><font face="궁서" size="3">육체적으로 힘든 것은 그리 중요한 것이 아니에요.</font></p> <p><font face="궁서" size="3">그래서 그냥 가는거에요.</font></p> <p><font face="궁서" size="3">하지만 사실은 배려를 해준 쪽을 생각한다면</font></p> <p><font face="궁서" size="3">'나 때문에 이렇게 쫓아와서 태워주려는구나. 내가 타야겠다.'라는 생각을 하지 못합니다.</font></p> <p><font face="궁서" size="3">왜 나를 태워야 하는 것인지에 대해서 감각이 조금 무디다고 볼 수 있습니다.</font></p> <p><font face="궁서" size="3">- 해당 방송 14분에서 15분 사이</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">해당 얘기를 들으니까 뜨끔해지더군요.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">제가 도서관에서 근무할 때 이런 일이 많았습니다.</font></p> <p><font face="궁서" size="3">도서관은 산 위에 있고 집은 밑에 있기에</font></p> <p><font face="궁서" size="3">같이 퇴근하는 공무원들이 산 밑까지 차를 태워주는 경우가 많았습니다.</font></p> <p><font face="궁서" size="3">어차피 산길은 같이 내려가니 괜찮다면서 저에게 타라고 하더군요.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">하지만 피곤한 날이나 급한 일이 아니고서는 대부분 거절했습니다.</font></p> <p><font face="궁서" size="3">이유는 하나.</font></p> <p><font face="궁서" size="3">퇴근 후 집으로 걸어가는 30분 가량의 시간 동안</font></p> <p><font face="궁서" size="3">그 날에 했던 일과 앞으로 남은 6시간 동안 해야할 일을 정리하고,</font></p> <p><font face="궁서" size="3">산에서 내려오며 바라보는 하늘과 경치를 바라보면서 스트레스를 풀 수 있었습니다.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">지금 저 이야기를 들으니 그 때 배려를 한 사람들에게 무례를 하였네요.OTL...</font></p> <p><font face="궁서" size="3">그걸 그 때에는 알지 못하고 이렇게 이야기를 들어서 알게 되다니....ㅜ</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">INTJ의 주기능 부기능 열등기능이라는 코너가 있습니다.</font></p> <p><font face="궁서" size="3">주기능은 N(직관형)으로</font></p> <p><font face="궁서" size="3">현재의 행동이 미래에 미칠 영향을 잘 파악한다고 합니다.</font></p> <p><font face="궁서" size="3">저는 그리 미래 예측을 못합니다만...OTL....</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">부기능은 T(사고형)으로</font></p> <p><font face="궁서" size="3">의사결정을 할 때 객관적이고 논리적이라고 합니다.</font></p> <p><font face="궁서" size="3">논리가 언제나 모자라 고생하고 있습니다만....?OTL....</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">열등기능은 S(감각형)으로</font></p> <p><font face="궁서" size="3">가까운 사람에게 무관심하게 행동한다고 합니다.</font></p> <p><font face="궁서" size="3">최근 여기에 대해 느낍니다.</font></p> <p><font face="궁서" size="3">가까운 사람에게 무관심하다...</font></p> <p><font face="궁서" size="3">그래서 친구들이 멀어지는 듯싶습니다.^^ㅜ</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">관련 항목으로 INTJ에 대한 얘기가 있네요.</font></p> <p><font face="궁서" size="3">'<a href="http://duswjd09.egloos.com/550356">INTJ_</a>'&nbsp;</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">일반적 특성:</font></p> <p><font face="궁서" size="3">- 아주 이론적이다</font></p> <p><font face="궁서" size="3">-&gt; 아닌 듯...ㅜ</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 어려운 난관은 자극제가 되며, 창의성을 요하는 도전에 응하는 것을 즐긴다.</font></p> <p><font face="궁서" size="3">-&gt; 최근 SICP를 풀면서 느낍니다.</font></p> <p><font face="궁서" size="3">조금 어렵기는 하지만 새로운 내용을 계속해서 배우고 있어 상당히 재미있습니다.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 비효율적으로 시간을 끄는 것을 싫어한다.</font></p> <p><font face="궁서" size="3">-&gt; 예전에 약속 시간을 지나 기다리는 것을 비효율적이라 생각해서</font></p> <p><font face="궁서" size="3">친구와 싸웠던 기억이 있네요.ㅜ</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 놀기 위해서 노는 기술을 배운다.</font></p> <p><font face="궁서" size="3">-&gt; 이건 아닌 듯싶네요.</font></p> <p><font face="궁서" size="3">스타크래프트를 즐기면서 해당 기술을 배우지는 않았습니다.</font></p> <p><font face="궁서" size="3">그냥 즐기면 되는 것이니까요.^^</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 겉은 강하지만 속은 아주 여리다</font></p> <p><font face="궁서" size="3">-&gt; 외강내유...이네요.^^ㅜ</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 인간관계에서 인간적인 면이 부족해서 능력을 인정받지 못하는 경우가 있다.</font></p> <p><font face="궁서" size="3">-&gt; 이건 모르겠네요.</font></p> <p><font face="궁서" size="3">만약 YES라면 인간적인 면도 능력이 될 수 있기 때문이고,</font></p> <p><font face="궁서" size="3">NO라면 능력이 모자람을 인간적이 면이 부족하다는 핑계를 대는 것이 아닌가 싶습니다.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 통찰력과 분석력이 뛰어나며 고집이 대단하다.</font></p> <p><font face="궁서" size="3">-&gt; 세 번째는 공감...;;</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 재능은 많으나 이로 인해 적응이 어려울 수 있다</font></p> <p><font face="궁서" size="3">-&gt; 재능?(풋...ㅜㅜ)</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 학구열이 강하다 (특히 순수학문)</font></p> <p><font face="궁서" size="3">-&gt; 학구열이 강한지도 의문...</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 대인관계에서 차갑다는 인상을 줄 수 있다.</font></p> <p><font face="궁서" size="3">-&gt; 그런 얘기는 몇 번...ㅜ</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 하고자 하는 의지가 강하다.</font></p> <p><font face="궁서" size="3">-&gt; 역시 잘...</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 잡담을 시간 낭비라고 생각한다.</font></p> <p><font face="궁서" size="3">-&gt; 우와... 이정도로 생각하는 사람을 보면서 '무서운 사람인걸?'이라 생각했는데,</font></p> <p><font face="궁서" size="3">그것이 INTJ 유형의 일반적 특성입니까?</font></p> <p><font face="궁서" size="3">같은 유형에 있어도 역시 무서운 사람은 무섭습니다.(응?)</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 일하는 곳에서 사람을 쉽게 사귄다.</font></p> <p><font face="궁서" size="3">-&gt; 일하는 곳이 많지는 않았지만...</font></p> <p><font face="궁서" size="3">일하는 곳이라면 어차피 거의 매일 봐야하는 사람들 아닙니까?</font></p> <p><font face="궁서" size="3">그럼 인사하고 여러 얘기를 나누다보면 자연스럽게 친해지지 않나요???</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 노는 자리를 어색해 한다.</font></p> <p><font face="궁서" size="3">-&gt; 정말 어색... 뻘쭘... 이런 표정입니다.</font></p> <p align="center"><img src="http://pds7.egloos.com/pds/200801/19/60/c0049460_47913c1b5acea.jpg" width="500" height="285"></p> <p align="center"><font face="궁서" size="3">출처 : <a href="http://news.naver.com/main/read.nhn?mode=LSD&amp;mid=sec&amp;sid1=100&amp;oid=003&amp;aid=0000728508">이명박 당선인, 신년하례법회 참석</a></font></p> <p><font face="궁서" size="3">날 좀 꺼내줘...</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3"> - 주어진 일에 성실하며 노력하는 편이다.</font></p> <p><font face="궁서" size="3">-&gt; 이것도 잘...</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 자신에게 의미가 있는 일에 열성적이다.</font></p> <p><font face="궁서" size="3">-&gt; 의미가 있는 일에는 당연히 열성적이지 않나요??</font></p> <p><font face="궁서" size="3">그 의미가 있는 일을 찾는 것이 어렵다고들 하더군요.OTL...</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 회식을 별로 좋아하지 않는다.</font></p> <p><font face="궁서" size="3">-&gt; 네.. 좋아하지 않습니다.</font></p> <p><font face="궁서" size="3">성격 이유도 있지만, 건강상 술을 금기하는터라 회식자리는 힘듭니다.</font></p> <p><font face="궁서" size="3">그래서 사회생활 특히 직장생활을 제대로 할 수 있을지 모르겠습니다.ㅜ</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 앞에 나서는 것을 대단히 싫어한다.</font></p> <p><font face="궁서" size="3">-&gt; 이것이 성격 때문인지 잘 모르겠습니다만,</font></p> <p><font face="궁서" size="3">초등학교 6년, 중고등학교 6년. 총 12년 동안 반장이 한 번도 되지 않았습니다.</font></p> <p><font face="궁서" size="3">언제나 후보로 올라왔지만 반장이 안되더군요.</font></p> <p><font face="궁서" size="3">아마도 사람들을 설득시키는 능력이 없나봅니다.^^</font></p> <p><font face="궁서" size="3">그 덕분에 앞에 나서서 무언가를 하는 일을 어려워합니다.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 혼자서 공상하는 것을 즐긴다.</font></p> <p><font face="궁서" size="3">-&gt; 혼자만의 세계에 빠지죠.</font></p> <p><font face="궁서" size="3">가끔 자폐증이 아닌가 고민하고 있습니다.OTL....</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 사적인 얘기는 거의 하지 않는다.</font></p> <p><font face="궁서" size="3">-&gt; 이것은 아닌 듯...</font></p> <p><font face="궁서" size="3">제 블로그를 보면 사적인 얘기 투성...^^;;</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 영화를 볼 때 뭔가 잘못된 장면이 없는지 찾으면서 보는 경우가 있다.</font></p> <p><font face="궁서" size="3">-&gt; 대부분입니다만...</font></p> <p><font face="궁서" size="3">이상하게도 동영상의 경우 그런 경우가 매우 많습니다.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">- 자신이 학생이라고 해도 옳다면 교수하고도 싸울 수 있다.</font></p> <p><font face="궁서" size="3">-&gt; 사실 이것때문에 이런 뻘짓(?)을 했습니다.</font></p> <p><font face="궁서" size="3">싸운다는 것이 조금 이상하지만,</font></p> <p><font face="궁서" size="3">제가 맞다고 생각하는 것에 대해 여러 얘기를 하였습니다.</font></p> <p><font face="궁서" size="3">하지만 그 때마다 느끼는 것은</font></p> <p><font face="궁서" size="3">'교수라는 직업은 아무나 되는 것이 아니구나.'입니다.</font></p> <p><font face="궁서" size="3">과연 얼마나 공부를 해야 그 정도 경지에 이르는지....OTL....</font></p>			 ]]> 
		</description>
		<category>in Thinking</category>
		<pubDate>Sun, 20 Jul 2008 13:41:28 GMT</pubDate>
		<dc:creator>NoSyu</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 건초를 앞에 두고도 굶어 죽은 당나귀 ]]> </title>
		<link>http://nosyu.egloos.com/4498827</link>
		<guid>http://nosyu.egloos.com/4498827</guid>
		<description>
			<![CDATA[ 
  <p><font face="궁서" size="3">SICP 3장 주석 47에 나오는 내용입니다.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">(전략)</font></p> <p><font face="궁서" size="3">이런 생각은 14세기 프랑스 철학자 장 뷔리당(Jean Buridan)이 주석을 단,</font></p> <p><font face="궁서" size="3">아리스토텔레스의 천체론(De caelo)에서 처음 나왔다.</font></p> <p><font face="궁서" size="3">그 책에서 뷔리당은 똑같이 맛 좋은 소스를 뿌려 놓은 음식 두 가지를</font></p> <p><font face="궁서" size="3">완벽한 이성을 갖춘 개 앞에 놓아두면,</font></p> <p><font face="궁서" size="3">개는 무엇부터 먹어야 할지 정하지 못하여 끝내 굶어 죽게 된다고 주장하였다.</font></p> <p><font face="궁서" size="3">(역주 : 이것은 흔히 뷔리당의 당나귀로 알려진 내용이다.)</font></p> <p><font face="궁서" size="3">The fundamental phenomenon here was originally observed</font></p> <p><font face="궁서" size="3">by the fourteenth-century French philosopher Jean Buridan</font></p> <p><font face="궁서" size="3">in his commentary on Aristotle's De caelo.</font></p> <p><font face="궁서" size="3">Buridan argued that a perfectly rational dog placed</font></p> <p><font face="궁서" size="3">between two equally attractive sources of food will starve to death,</font></p> <p><font face="궁서" size="3">because it is incapable of deciding which to go to first.</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">두 개의 먹이를 앞에 두고 어느 것을 먼저 먹을 것인가 고민하다가 굶어 죽는다라...</font></p> <p><font face="궁서" size="3">먼저 뷔리당의 당나귀라는 것을 검색해보았습니다.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3"><a href="http://www1.encyber.com/search_w/ctdetail.php?masterno=80244&amp;contentno=80244">뷔리당의 당나귀(Buridan's ass)</a></font></p> <p><font face="궁서" size="3">양쪽에 동질(同質) ·동량(同量)의 먹이를 놓아두었을 때</font></p> <p><font face="궁서" size="3">당나귀가 어느 쪽 먹이를 먹을 것인가를 결정하지 못하여 아사(餓死)한다는 이야기.</font></p> <p><font face="궁서" size="3">프랑스의 스콜라 철학자 J.뷔리당이 하였다고 전해지는 유명한 말이다.</font></p> <p><font face="궁서" size="3">이 말 자체는 아리스토텔레스의 《천체론(天體論)》에서 개를 예로 들어 인용되었으며</font></p> <p><font face="궁서" size="3">J.뷔리당은 이 책에 주해(註解)를 남겼다.</font></p> <p><font face="궁서" size="3">그의 저서에는 이 말이 들어 있지 않으나,</font></p> <p><font face="궁서" size="3">뷔리당의 자유의지론(自由意志論)을 야유하여 다른 사람들이 말한 것으로 추측된다.</font></p> <p><font face="궁서" size="3">이 말은 두 동등한 힘의 모티프 사이에서</font></p> <p><font face="궁서" size="3">의지(意志)의 행사(行使)를 할 수 없다는 것을 증명하는 데 사용된 말이다.</font></p> <p><font face="궁서" size="3">- <a href="http://www1.encyber.com/search_w/ctdetail.php?masterno=80244&amp;contentno=80244">두산백과사전</a></font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">천체론에서는 개가 쓰이는데 당나귀로 바뀌었군요.^^;;</font></p> <p><font face="궁서" size="3">여하튼 두 동등한 힘의 모티브 사이에서 의지의 행사를 할 수 없다라...</font></p> <p><font face="궁서" size="3">SICP에서 말한 동등한 중요도를 가지는 프로세스가</font></p> <p><font face="궁서" size="3">서로 CPU의 자원을 가지려고 할 때 deadlock이 나온다는 얘기와 통한다고 생각합니다.</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">그렇다면 과연 이산적인 컴퓨터 세상이 아닌 현실 세계에서는 어떠할까요?</font></p> <p><font face="궁서" size="3">이와 관련된 이야기가 있나 싶어 살펴보았습니다.</font></p> <p><font face="궁서" size="3">그러자 재미있는 글이 몇 개 보였습니다.</font></p> <p><font face="궁서" size="3">그 중 두 개를 소개하겠습니다.</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">뷔리당은 정말이지 너무 배가 고팠다.</font></p> <p><font face="궁서" size="3">그의 허기는 무슨 일에든 완벽하게 합리적인 결정만 내리겠다는</font></p> <p><font face="궁서" size="3">그의 결심과 더불어 시작되었다.</font></p> <p><font face="궁서" size="3">문제는 냉장고의 음식이 다 떨어졌는데 그가 살고 있는 곳에서</font></p> <p><font face="궁서" size="3">정확히 똑같은 거리에 두 개의 똑같은 이마트 지점이 있다는 것이다.</font></p> <p><font face="궁서" size="3">이렇게 되면 그로서는 둘 중 한 가게를 선택하고,</font></p> <p><font face="궁서" size="3">다른 한쪽에 가지 않을 충분한 이유가 없다.</font></p> <p><font face="궁서" size="3">그래서 어느 한 이마트를 선택할 합리적 근거를 찾아내지 못한 채</font></p> <p><font face="궁서" size="3">끊임없이 망설이는 상태에 갇혀 있었던 것이다.</font></p> <p><font face="궁서" size="3">배에서 꾸르륵 소리가 나는 것을 더는 참을 수 없을 때</font></p> <p><font face="궁서" size="3">그는 한 가지 해결책을 찾아냈다고 생각했다.</font></p> <p><font face="궁서" size="3">굶어죽는 것이 분명 비합리적인 일이라면,</font></p> <p><font face="궁서" size="3">두 군데의 이마트 중 임의로 한 군데를 선택하는 것이 합리적이지 않을까?</font></p> <p><font face="궁서" size="3">단순히 동전을 던지거나 자기 마음에 드는 쪽으로 방향을 잡기만 하면 될 것이다.</font></p> <p><font face="궁서" size="3">이것은 집에서 아무것도 안하고 가만히 앉아 있는 것보다는</font></p> <p><font face="궁서" size="3">분명히 더 합리적인 일이었다.</font></p> <p><font face="궁서" size="3">그러나 그렇게 되면 완벽하게 합리적인 결정만 내리겠다는</font></p> <p><font face="궁서" size="3">그 규칙을 무너뜨려야 하지 않을까?</font></p> <p><font face="궁서" size="3">이런 그의 생각은,</font></p> <p><font face="궁서" size="3">이를테면 동전 던지기와 같은 비합리적인 결정을 내리는 것이</font></p> <p><font face="궁서" size="3">합리적인 일임을 내포하고 있다.</font></p> <p><font face="궁서" size="3">그러나 ‘합리적인 비합리성’이란 것이 과연 합리적일까?</font></p> <p><font face="궁서" size="3">뷔리당은 치솟는 혈당 때문에 그 질문에 답할 수 없었다.&nbsp; - 뷔리당의 역설 -</font></p> <p><font face="궁서" size="3">- <a href="http://cafe.daum.net/woobo63/7EdI/40?docid=1BANe|7EdI|40|20080613180038&amp;q=%BA%DF%B8%AE%B4%E7%C0%C7%20%B4%E7%B3%AA%B1%CD&amp;srchid=CCB1BANe|7EdI|40|20080613180038">합리적 판단의 비합리성 그 오류와 한계</a></font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">'뷔리당의 당나귀'라는 이야기가 있습니다.</font></p> <p><font face="궁서" size="3">뷔리당은 14세기의 프랑스 철학자입니다.</font></p> <p><font face="궁서" size="3">이 이야기는 그의 책 어디에서도 출처를 찾을 수 없지만</font></p> <p><font face="궁서" size="3">예로부터 '뷔리당의 당나귀'라는 이름으로 유명한 예화입니다.</font></p> <p><font face="궁서" size="3">쫄쫄 굶어서 뱃가죽이 등에 달라붙을 정도로 배고픈 당나귀 한 마리가 있었습니다.</font></p> <p><font face="궁서" size="3">다행스럽게도 건초로 뒤덮인 산을 발견했습니다.</font></p> <p><font face="궁서" size="3">하지만 불행하게도 당나귀는 두 개의 산을 동시에 보고 말았습니다.</font></p> <p><font face="궁서" size="3">건초들은 양쪽이 똑같았습니다.</font></p> <p><font face="궁서" size="3">그래서 당나귀는 헷갈리기 시작했던 것입니다.</font></p> <p><font face="궁서" size="3">어느 산의 건초를 먼저 먹어야 할까?</font></p> <p><font face="궁서" size="3">어리석기 짝이 없는 헷갈림이지만 당나귀는 완전히 혼란스러워졌습니다.</font></p> <p><font face="궁서" size="3">오른쪽 산부터 먹어야겠다고 마음먹고</font></p> <p><font face="궁서" size="3">오른쪽 산을 향해 두세 걸음 걸어가다보면 왠지 왼쪽 산이 더 맛있게 보입니다.</font></p> <p><font face="궁서" size="3">그래서 왼쪽으로 방향을 틀고 가다보면</font></p> <p><font face="궁서" size="3">이번에는 오른쪽의 것이 더 맛있게 보이는 것입니다.</font></p> <p><font face="궁서" size="3">결국 다음날 아침,</font></p> <p><font face="궁서" size="3">당나귀는 건초로 뒤덮인 두 개의 산 중간에서 굶어 죽은 채 발견되었습니다.</font></p> <p><font face="궁서" size="3">이것이 '뷔리당의 당나귀'라는 이야기입니다.</font></p> <p><font face="궁서" size="3">정말 어리석지 않습니까?</font></p> <p><font face="궁서" size="3">앞서 저는 '어리석기 짝이 없는 헷갈림'이라고 말씀드렸습니다.</font></p> <p><font face="궁서" size="3">하지만 정말 당나귀가 바보였을까요?</font></p> <p><font face="궁서" size="3">그렇다면 이처럼 헷갈리고 미혹되어 살아가고 있는 인간은 어떨까요?</font></p> <p><font face="궁서" size="3">저는 전에 한 국립대학에서 철학을 가르쳤는데,</font></p> <p><font face="궁서" size="3">인생 상담을 하러 학생들이 이따금 찾아오곤 했습니다.</font></p> <p><font face="궁서" size="3">가장 많은 상담을 그 대학을 그만두고</font></p> <p><font face="궁서" size="3">다른 대학으로 편입하는 것이 나은가 하는 것이었습니다.</font></p> <p><font face="궁서" size="3">그래서 저는 물었습니다.</font></p> <p><font face="궁서" size="3">"자네는 정말 이 대학을 그냥 계속 다녀도 좋고</font></p> <p><font face="궁서" size="3">다른 대학으로 옮겨가도 좋다고 생각하고 있는가?"</font></p> <p><font face="궁서" size="3">그러면 학생은 "그렇습니다."라고 대답합니다.</font></p> <p><font face="궁서" size="3">몇차례 확인해보지만 학생들의 대답에는 변함이 없습니다.</font></p> <p><font face="궁서" size="3">"그런 이 주사위를 던져보게.</font></p> <p><font face="궁서" size="3">짝수가 나오면 이 학교에 남고, 홀수가 나오면 편입하기로 결정보세."</font></p> <p><font face="궁서" size="3">그러면 대부분의 학생들은 화를 냅니다.</font></p> <p><font face="궁서" size="3">"저는 정말 심각하게 고민하고 있습니다. 선생님, 장난치지 마십시오."</font></p> <p><font face="궁서" size="3">저는 장난치고 있던 것이 아니었습니다.</font></p> <p><font face="궁서" size="3">어느 쪽을 택해도 똑같은 것이라면</font></p> <p><font face="궁서" size="3">일찌감치 어느 쪽이든 결정해서 자신이 정한 길을 열심히 걸어가는 편이 더 낫다,</font></p> <p><font face="궁서" size="3">어는 쪽이라도 괜찮은데 괜히 미적미적 방황하고 있다면</font></p> <p><font face="궁서" size="3">그 방황은 헛된 것이라고 생각했던 것입니다.</font></p> <p><font face="궁서" size="3">그러므로 주사위를 던져서라도 결단을 내리도록 권했던 것입니다.</font></p> <p><font face="궁서" size="3">어느 쪽도 괜찮다면 우연에 의해서라도 결정짓는 것이 현명하다고 저는 생각합니다.</font></p> <p><font face="궁서" size="3">그런데 학생의 입장에서는</font></p> <p><font face="궁서" size="3">인생의 여러 가지 문제들에 '정답'이 있다고 생각하시는 것 같습니다.</font></p> <p><font face="궁서" size="3">이것일까 저것일까 고민하며 방황할 때 인생의 지혜를 가진 사람이라면</font></p> <p><font face="궁서" size="3">딱 맞는 충고를 해줄 수 있을 거라고 생각하는 성향이 매우 짙습니다.</font></p> <p><font face="궁서" size="3">교수나 전문가에게 상담하는 것도 그런 충고를 구하기 위해서일 것입니다.</font></p> <p><font face="궁서" size="3">그렇지만 인생에 '정답'이 있을까요?</font></p> <p><font face="궁서" size="3">이것이냐, 저것이냐 두갈래 길을 걸어가보고 어느 쪽이 옳았는지 비교할 수는 없습니다.</font></p> <p><font face="궁서" size="3">인생의 길은 자신이 지금 걸어가고 있는 길을 묵묵히 가는 것 외에 다른 도리가 없습니다.</font></p> <p><font face="궁서" size="3">&lt;반야심경&gt;에서는 "무지역무득無智亦無得"이라고 말하고 있습니다.</font></p> <p><font face="궁서" size="3">'득得'은 깨달음을 얻는 것을 말합니다.</font></p> <p><font face="궁서" size="3">지혜가 없으면 깨달음도 없다는 뜻입니다.</font></p> <p><font face="궁서" size="3">소승불교는 지혜나 깨달음에 집착하고 있지만</font></p> <p><font face="궁서" size="3">그렇게 되면 마치 인생에 '정답'이 있는 것처럼 착각해버리게 됩니다.</font></p> <p><font face="궁서" size="3">그러므로 &lt;반야심경&gt;은 지혜나 깨달음에 집착할 필요가 없다고 가르치고 있습니다.</font></p> <p><font face="궁서" size="3">- <a href="http://cafe.daum.net/sejon/389m/128?docid=n6nR|389m|128|20060107202247&amp;q=%BA%DF%B8%AE%B4%E7%C0%C7%20%B4%E7%B3%AA%B1%CD&amp;srchid=CCBn6nR|389m|128|20060107202247">[에세이] 제51강 뷔리당의 당나귀</a></font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">두 글 모두 재미있는 글입니다.^^</font></p> <p><font face="궁서" size="3">사실 두 번째 글에서 받아들이기 힘든 부분도 있지만,</font></p> <p><font face="궁서" size="3">뷔리당의 당나귀라는 것과 그 비합리성에 대해 이해할 수 있는 좋은 글이라 생각합니다.</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">그러고보니 사랑 얘기에도 비슷하지 않을까요?</font></p> <p><font face="궁서" size="3">누구와 사랑하고 결혼한다는 것.</font></p> <p><font face="궁서" size="3">그것은 다른 쪽으로 넘어갈 수 없는 그야말로 하나의 선택이 되겠지요.</font></p> <p><font face="궁서" size="3">(이혼과 재혼이 있지 않느냐라고 말씀하신다면... '평생'이라는 제한을 두겠습니다.</font></p> <p><font face="궁서" size="3">내세가 있지 않느냐라고 말씀하신다면... 없다고 하겠습니다.;;;)</font></p> <p>&nbsp;</p> <p><font face="궁서" size="3">그렇게 생각을 하니 사람 사는 세상은</font></p> <p><font face="궁서" size="3">컴퓨터 세상처럼 중요도가 100% 맞는 일은 발생하지 않겠지만,</font></p> <p><font face="궁서" size="3">그 모호성 때문에 100%로 맞아 보이는 일은 분명 있을 것입니다.</font></p> <p><font face="궁서" size="3">그럴 때 뷔리당의 당나귀가 되어 고민에만 빠져 굶어 죽을 것인지,</font></p> <p><font face="궁서" size="3">주사위를 던져서라도 선택을 해야할 것인지...</font></p> <p><font face="궁서" size="3">생각해보니 상당히 어려운 문제네요.^^</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">다만, 이것 하나만은 기억해야할 듯싶습니다.</font></p> <p><font face="궁서" size="3">도저히 선택을 할 수 없어 주사위를 던지든 동전을 던지든간에</font></p> <p><font face="궁서" size="3">그 이후에 나타나는 일에 대한 책임을 주사위나 동전에 미루지 말자는겁니다.</font></p> <p><font face="궁서" size="3">최근 기사에서 그런 사람이 상당히 역겹다는 것을 느끼기에</font></p> <p><font face="궁서" size="3">그런 역겨운 사람은 되지 말아야겠다는 가이드라인을 잡고 싶습니다.</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">그러고보니 경험이 많다는 점, 생각이 많다는 점은</font></p> <p><font face="궁서" size="3">이러한 가이드 라인이 많아 중요도를 저울질 할 때</font></p> <p><font face="궁서" size="3">세밀한 부분까지 살펴볼 수 있는 능력이 있다는 것이 아닐까 싶네요.^^</font></p> <p><font face="궁서" size="3">(능력이 있는 것이지 그렇게 한다는 것은 아닙니다.)</font></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><font face="궁서" size="3">PS</font></p> <p><font face="궁서" size="3">이번에도 결론이 다른 길로 빠지고 말았습니다.OTL....</font></p> <p><font face="궁서" size="3">하지만 나름 재미있는 생각으로 마인드 맵을 그려보지 않았나 싶습니다.^^</font></p> <p><font face="궁서" size="3">뷔리당의 당나귀에 대해 아시는 분은 댓글 부탁드립니다.^^</font></p>			 ]]> 
		</description>
		<category>in Thinking</category>
		<pubDate>Sat, 19 Jul 2008 15:30:55 GMT</pubDate>
		<dc:creator>NoSyu</dc:creator>
	</item>
</channel>
</rss>
