問題3.71 – SICP(計算機プログラムの構造と解釈)その161

問題3.71

weighted-pairs 等の必要な手続きは問題3.70のものを使う。

;;;; Ramanujan 数を求める
(define (add-cube-pairs-weight pair)
  (let ((i (car pair))
        (j (cadr pair)))
       (+ (cube i) (cube j))))

(define st (weighted-pairs integers integers add-cube-pairs-weight))

(define (ramanujan s)
  (let ((s1car (stream-car s))
        (s2car (stream-car (stream-cdr s))))
       (let ((s1-weight (add-cube-pairs-weight s1car))
             (s2-weight (add-cube-pairs-weight s2car)))
            (if (= s1-weight s2-weight)
                (cons-stream s1-weight
                             (ramanujan (stream-cdr s)))
                (ramanujan (stream-cdr s))))))

(define ramanujan-stream
  (ramanujan st))

(stream-head ramanujan-stream 6)
gosh> 1729
4104
13832
20683
32832
39312
done
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»