我正在尝试编写一个过程,该过程需要2个流并将它们组合在一起,然后将它们交错。现在它没有产生正确的输出。这是我的代码:
(define (interleave-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))
(interleave-pairs t (stream-cdr s)))))
为了获得我写过程序的值:
(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)))
所以当我打电话时
(take 6 (pairs integers integers))
我得到了:
((1 . 1)
((1 . 2) . #<promise>)
(1 . 2)
((1 . 3) . #<promise>)
(2 . 2)
((2 . 3) . #<promise>))
我想要(1 1)(1 1)(1 2)(1 3)(2 2)(2 3)
答案 0 :(得分:2)
您的过程中的基本情况丢失了(如果其中一个流在另一个之前结束会发生什么?)。过程相当简单,只需要一对元素(每个流一个)然后交错它们,不需要在这里使用stream-map
:
(define (pairs s1 s2)
(if (stream-null? s1)
s2
(stream-cons (list (stream-car s1) (stream-car s2))
(pairs s2 (stream-cdr s1)))))