exercise 3.66

まぁ多分答えは出せたはず。
ただし証明はしてない。どうしましょ。


とりあえず、紙に書いて適当に推論した結果がこれ

(define (ref-of-m-n m n)                                                                      
  (cond ((> m n) (error "m is larger than n!" (list m n)))                                    
        ((= m n) (- (expt 2 m) 2))                                                            
        (else (- (* (expt 2 (- m 1)) (+ (- (* 2 n) (* 2 m)) 1)) 2))))

放り込むと、

gosh> (define p (pairs integers integers))                                                    
p                                                                                             
gosh> (ref-of-m-n 10 10)                                                                      
1022                                                                                          
gosh> (stream-ref p 1022)                                                                     
(10 10)                                                                                       
gosh> (ref-of-m-n 9 13)                                                                       
2302                                                                                          
gosh> (stream-ref p 2302)                                                                     
(9 13)                                                                                                   
gosh> (ref-of-m-n 14 14)                                                                      
16382                                                                                         
gosh> (stream-ref p 16382)                                                                    
(14 14)                                                                                       
gosh> (ref-of-m-n 5 15)                                                                       
334                                                                                           
gosh> (stream-ref p 334)                                                                      
(5 15) 

みたくうまく行く模様。
(何この関数名・・・、何を言いたいんでしょうね☆)


ということで、お題にあったやつは

gosh> (ref-of-m-n 1 100)                                                                      
197                                                                                           
gosh> (ref-of-m-n 99 100)                                                                     
950737950171172051122527404030                                                                
gosh> (ref-of-m-n 100 100)                                                                    
1267650600228229401496703205374

だとさ。試せるわけないだろ・・・jk
証明は後でちょっとやってみるか。そんなに大変そうでもないし。


追記
・・・と思ったが、うまく言えないというか、それ以前にやる気がさぱーり。
ということで、この証明は今度頑張ろうw
つまりあれですね、delayして遅延hy(ry