diff options
Diffstat (limited to 'js/games/nluqo.github.io/~bh/61a-pages/Lectures/4.2/pairs.scm')
-rw-r--r-- | js/games/nluqo.github.io/~bh/61a-pages/Lectures/4.2/pairs.scm | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/js/games/nluqo.github.io/~bh/61a-pages/Lectures/4.2/pairs.scm b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/4.2/pairs.scm new file mode 100644 index 0000000..37e3a98 --- /dev/null +++ b/js/games/nluqo.github.io/~bh/61a-pages/Lectures/4.2/pairs.scm @@ -0,0 +1,40 @@ +;;; The integers. + +(define (ints-from n) + (cons-stream n (ints-from (+ n 1)))) + +(define integers (ints-from 1)) + +;;; pairs of integers, A&S version + +(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))))) + +;;; Louis Reasoner's version, ex. 3.68 + +(define (louis-pairs s t) + (interleave + (stream-map (lambda (x) (list (stream-car s) x)) + t) + (louis-pairs (stream-cdr s) (stream-cdr t)))) + +;;; Fixing Louis's version with explicit DELAY and FORCE + +(define (fixed-pairs s t) + (interleave-delayed + (stream-map (lambda (x) (list (stream-car s) x)) + t) + (delay (fixed-pairs (stream-cdr s) (stream-cdr t))))) + +(define (interleave-delayed s1 delayed-s2) + (if (stream-null? s1) + (force delayed-s2) + (cons-stream (stream-car s1) + (interleave-delayed (force delayed-s2) + (delay (stream-cdr s1)))))) + |