sicp-ex-3.72



<< Previous exercise (3.71) | Index | Next exercise (3.73) >>


meteorgan

  
  
  
  
 (define (square x) (* x x)) 
 (define (sum-square x) (+ (square (car x)) (square (cadr x)))) 
 (define (squaresn s) 
         (define (stream-cadr s) (stream-car (stream-cdr s))) 
         (define (stream-caddr s) (stream-cadr (stream-cdr s))) 
         (let ((scar (stream-car s)) 
                   (scadr (stream-cadr s)) 
                   (scaddr (stream-caddr s))) 
                 (if (= (sum-square scar) (sum-square scadr) (sum-square scaddr)) 
                         (cons-stream (list (sum-square scar) scar scadr scaddr) 
                                                  (squaresn (stream-cdr (stream-cdr (stream-cdr s))))) 
                         (squaresn (stream-cdr s))))) 
 (define square-numbers  
         (squaresn (weighted-pairs integers integers sum-square)))