exercise 3.50~51

3.50
(define (stream-map proc . argstreams)                         
  (if (stream-null? (car argstreams))                          
      the-empty-stream                                         
      (cons-stream                                             
       (apply proc (map stream-car argstreams))                
       (apply stream-map                                       
              (cons proc (map stream-cdr argstreams)))))) 

applyの最後の引数はリストなのか

3.51
gosh> (define x (stream-map show (stream-enumerate-interval 0 
10))) 
                                                               
0x                                                             
gosh> (stream-ref x 5)                                         
                                                               
1                                                              
2                                                              
3                                                              
4                                                              
55                                                             
gosh> (stream-ref x 7)                                         
                                                               
6                                                              
77  

一回目の呼び出しだと、showが呼ばれる。
それ以降はメモ化してるのでshowがよばれない
そんなこんなで、こういう結果に。
ちなみにメモ化しない場合は、何回やっても結果は一緒。


ちなみにdelayとかの実装は以下を参照
http://d.hatena.ne.jp/motemen/20060628/1151483118