这里的代码可以生成这样的数字[1 -2 3 -4 5 -6 7 -8 9 -10 ...]
(define (integers-starting-from n)
(cons-stream n (stream-map - (integers-starting-from (+ n 1)))))
我不太了解它产生交替标志的方式。 有人可以给我一个更好的描述,以帮助我想象这个吗?
您可以在mit-scheme中运行代码。
答案 0 :(得分:7)
让我们这样想:
太生成无限的整数流,我们想做
(define (integers-starting-from n)
(cons-stream n (integers-starting-from (+ n 1))))
这就像这样(从n = 1开始):
(+1 +2 +3 +4 +5 ...)
现在,让我们假设我们从第二位获取所有元素,然后反转它们的符号:
(+1 -2 -3 -4 -5 ...)
让我们为第三名和以下人员做同样的事情:
(+1 -2 +3 +4 +5 ...)
每次重复两次,每次从下一个地方开始:
(+1 -2 +3 -4 -5 ...)
(+1 -2 +3 -4 +5 ...)
正如我们所看到的,如果在每个元素之后我们添加整数流的其余部分,在反转它的符号(反转流的其余部分的符号)之后,我们将得到你想要的 - 一个整数流交替的迹象。每次我们在流的其余部分使用stream-map
和-
来反转它的符号,其中“流的其余部分”只是从(+ n 1)
开始的流。
用cons-stream
包裹它,你应该拥有它。
答案 1 :(得分:1)
(cons-stream n (stream-map - (integers-starting-from (+ n 1)))))
正在做两件事,首先是cons-stream
值n
和评估(stream-map - (integers-starting-from (+ n 1)))
的值格式,它恰好是流的反转,作为-
的monadic案例是否定的。因此,你的交替模式。
从功能名称出现,您正在寻找更像这样的东西
(define (integers-starting-from n)
(cons-stream n (integers-starting-from (+ n 1))))