scheme - 使用流生成具有交替符号的数字的更好解释

标签 scheme sicp mit-scheme

这里的代码可以生成这样的数字 [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 中运行代码。

最佳答案

让我们这样想:

太生成一个无限的整数流,我们想要做

(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 把它全部包起来你应该拥有它。

关于scheme - 使用流生成具有交替符号的数字的更好解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6307380/

相关文章:

scheme - 如何在 Edwin 中加载文件

emacs - schema-send-definition 和 schema-send-last-sexp 之间有什么区别

functional-programming - 替换符号表达式中的符号

scheme - MicroKanren - 术语是什么?

recursion - 方案中的迭代图

lambda - 如何在 Scheme 中使用列表中的 lambda

compilation - 使用 MIT-SCHEME 编译 .scm 文件

scheme - 给定索引列表重新排列列表

scheme - 查找调用许多过程的过程的增长顺序

lisp - SICP 2.42 八皇后。帮忙看看我的代码有什么问题?