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