Code Review

Compare your solutions

    (define (stream-car x) (stream-first x))
(define (stream-cdr x) (stream-rest x))

(define (integers-starting-from n)
  (stream-cons n
               (integers-starting-from (+ n 1))))
(define integers (integers-starting-from 1))

(define (merge-weighted s1 s2 weight)
  (cond ((stream-empty? s1) s2)
        ((stream-empty? s2) s1)
        (else (let ((x1 (stream-car s1))
                    (x2 (stream-car s2)))
                (if (<= (weight x1) (weight x2))
                    (stream-cons x1 (merge-weighted (stream-cdr s1) s2 weight))
                    (stream-cons x2 (merge-weighted s1 (stream-cdr s2) weight)))))))



(define (weighted-pairs s t weight)
  (stream-cons
   (cons (stream-car s) (stream-car t))
   (merge-weighted
    (stream-map (lambda (x) (cons (stream-car s) x))
                (stream-cdr t))
    (weighted-pairs (stream-cdr s) (stream-cdr t) weight) weight)))

(define (sum-of-cube x)
  (let ((i (car x)) (j (cdr x)))
    (+ (* i i i) (* j j j))))

(define sorted-pairs
  (weighted-pairs integers integers
                  sum-of-cube))

(define sum-stream
  (stream-map sum-of-cube sorted-pairs))

(define (combine-streams s1 s2)
  (stream-cons (cons (stream-car s1) (stream-car s2))
               (combine-streams (stream-cdr s1) (stream-cdr s2))))

(define ramanujan-numbers
  (stream-map (lambda (x) (cdr x))
              (stream-filter (lambda (x) (= (sum-of-cube (car x)) (cdr x)))
                             (combine-streams sorted-pairs (stream-cdr sum-stream)))))