Scheme 方案对输出

Scheme 方案对输出,scheme,racket,Scheme,Racket,尝试产生一个看起来像(1 1)(1 2)(1 3)(2 2 2)(2 3)(3 3)的成对输出,如果获取流的前6个元素。(前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 (strea

尝试产生一个看起来像(1 1)(1 2)(1 3)(2 2 2)(2 3)(3 3)的成对输出,如果获取流的前6个元素。(前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和integer的定义如下:

(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>))
((1.1)
((1 . 2) . #)
(2 . 2)
((2 . 3) . #)
(3 . 3)
((3 . 4) . #))
在方案中

(define (interleaved-pairs xs ys . args)
  (let ((x (stream-car xs))
        (ac (if (null? args) () (car args))))
    (stream-append 
      (stream-map stream-car (list->stream (reverse ac)))
      (stream-cons (list x (stream-car ys))
        (interleaved-pairs 
          (stream-cdr xs)
          (stream-cdr ys)
          (cons
            (stream-map (lambda(y)(list x y)) (stream-cdr ys))
            (map stream-cdr ac)))))))
这应该按照您想要的顺序生成结果:
(11)(12)(22)(13)(23)(33)(14)…

你也把它标记为球拍。据我在中所见,它有
stream first
代替
stream car
等。出于某种原因,它似乎没有
list->stream
,这可以用
apply
stream
函数非常直接地定义


在这里

ipairs xs ys=g xs ys[]其中
g(x:xs)(y:ys)ac=地图头(反向ac)+(x,y):
Gxs-ys(映射(,)x)ys:map-tail-ac)
在方案中

(define (interleaved-pairs xs ys . args)
  (let ((x (stream-car xs))
        (ac (if (null? args) () (car args))))
    (stream-append 
      (stream-map stream-car (list->stream (reverse ac)))
      (stream-cons (list x (stream-car ys))
        (interleaved-pairs 
          (stream-cdr xs)
          (stream-cdr ys)
          (cons
            (stream-map (lambda(y)(list x y)) (stream-cdr ys))
            (map stream-cdr ac)))))))
这应该按照您想要的顺序生成结果:
(11)(12)(22)(13)(23)(33)(14)…

你也把它标记为球拍。据我在中所见,它有
stream first
代替
stream car
等。出于某种原因,它似乎没有
list->stream
,这可以用
apply
stream
函数非常直接地定义


在这里

ipairs xs ys=g xs ys[]其中
g(x:xs)(y:ys)ac=地图头(反向ac)+(x,y):
Gxs-ys(映射(,)x)ys:map-tail-ac)

(取200(对整数))
产生什么?是否应该出现
(14)
(15)
(15)
等?什么是“三栏”?这个问题的“副本”没有令人满意的答案;下面的结束语说“如果这些答案不能完全解决您的问题,请提出一个新问题”,但这正是OP在这里所做的。投票重新开放。
(需要200(对整数))
会产生什么结果?是否应该出现
(14)
(15)
(15)
等?什么是“三栏”?这个问题的“副本”没有令人满意的答案;下面的结束语说“如果这些答案不能完全解决您的问题,请提出一个新问题”,但这正是OP在这里所做的。投票重新开放。