Answer 3.66

main
Felix Martin 2021-01-06 06:09:20 -05:00
parent cce800e61c
commit 52495ade20
2 changed files with 50 additions and 1 deletions

View File

@ -101,4 +101,42 @@
(display "\nex-3.66\n")
; (display "\nex-3.67\n")
(define (pairs s t)
(cons-stream
(list (stream-car s) (stream-car t))
(interleave
(stream-map (lambda (x) (list (stream-car s) x))
(stream-cdr t))
(pairs (stream-cdr s) (stream-cdr t)))))
(define int-pairs (pairs integers integers))
(define prime-pairs
(stream-filter
(lambda (pair) (prime? (+ (car pair) (cadr pair))))
int-pairs))
(define (stream-append s1 s2)
(if (stream-null? s1)
s2
(cons-stream (stream-car s1)
(stream-append (stream-cdr s1) s2))))
(define (interleave s1 s2)
(if (stream-null? s1)
s2
(cons-stream (stream-car s1)
(interleave s2 (stream-cdr s1)))))
(assert (find (list 2 5) prime-pairs) 6)
(assert (find (list 3 3) int-pairs) 6)
(assert (find (list 1 100) int-pairs) 197)
;(assert (find (list 99 100) int-pairs) 1000)
;(assert (find (list 100 100) int-pairs) 10)
; I haven't been able to figure out the relationship by myself.
; The explanations on Schemewiki are good, though:
; http://community.schemewiki.org/?sicp-ex-3.66
(display "\nex-3.67\n")

View File

@ -74,6 +74,13 @@
(cons (stream-car xs)
(take (- n 1) (stream-cdr xs)))))
(define (find item stream)
(define (iter n stream)
(if (equal? (stream-car stream) item)
n
(iter (+ n 1) (stream-cdr stream))))
(iter 0 stream))
(define (display-stream s)
(stream-for-each display-line s))
@ -97,4 +104,8 @@
(define (add-streams s1 s2)
(stream-map + s1 s2))
(define ones (cons-stream 1 ones))
(define integers (cons-stream 1 (add-streams ones integers)))
'util-loaded