<< 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)))
meteorgan