0

我正在尝试编写一个程序,该程序需要 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)

4

1 回答 1

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)))))
于 2013-03-31T05:13:37.980 回答