如果采用流的前 6 个元素,则尝试生成看起来像 (1 1) (1 2) (1 3) (2 2) (2 3) (3 3) 的对的输出。(前 6 列有 3 列,它应该打印以 1 开头的对,然后是 2,然后是 3。)我拥有的代码是:
(define (pairs s t)
(cons-stream (cons (stream-car s) (stream-car t))
(cons-stream
(stream-map (lambda (x) (cons (stream-car s) x))
(stream-cdr t))
(pairs (stream-cdr t) (stream-cdr s)))))
如果我跑
(take 6 (pairs integers integers))
其中 take 和 integers 定义如下:
(define (take n s)
(if (= n 0)
'()
(cons (stream-car s) (take (- n 1) (stream-cdr s)))))
(define integers (cons-stream 1 (add-streams ones integers)))
我得到的结果是:
((1 . 1)
((1 . 2) . #<promise>)
(2 . 2)
((2 . 3) . #<promise>)
(3 . 3)
((3 . 4) . #<promise>))