Chapter 3, Modularity, Objects, and State

Exercise 3.69


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(define (triples a b c)
  (cons-stream
   (list (stream-car a) (stream-car b) (stream-car c))
   (interleave
	(stream-map (lambda (pair)
				  (list (stream-car a) (car pair) (cadr pair)))
				(stream-cdr (pairs b c)))
	(triples (stream-cdr a) (stream-cdr b) (stream-cdr c)))))

(define py-triplets
  (stream-filter (lambda (triple)
				   (= (+ (square (car triple))
						 (square (cadr triple)))
					  (square (caddr triple))))
				 (triples integers integers integers)))

Example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1 ]=> (stream-ref py-triplets 0)

;Value: memo-proc

1 ]=> 
;Value 4: (3 4 5)

1 ]=> (stream-ref py-triplets 1)

;Value 5: (6 8 10)

1 ]=> (stream-ref py-triplets 2)

;Value 6: (5 12 13)

1 ]=> (stream-ref py-triplets 3)

;Value 7: (9 12 15)

1 ]=> (stream-ref py-triplets 3)

;Value 7: (9 12 15)