Scheme 方案对输出
尝试产生一个看起来像(1 1)(1 2)(1 3)(2 2 2)(2 3)(3 3)的成对输出,如果获取流的前6个元素。(前6列有3列,它应该打印从1开始的对,然后是2,然后是3。)我的代码是: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
(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在这里所做的。投票重新开放。