矩阵的方案流

时间:2012-10-15 05:53:38

标签: scheme sicp r5rs

我想在方案中有一个包含一堆具有特定顺序的矩阵的流。

该流的流车将是矩阵[1 6 0 3];也就是说,第1行col 1为1,第1行第2列为6,第2行第1列为0,第2行第2列为3.每个矩阵在技术上都是一个列表,但我有一个表示(构造函数和选择器)一个2x2矩阵。所以,这将是一个2x2矩阵流。

现在,流中的下一个项目应为[2 10 0 5]。这里的模式是下一个流中的矩阵增加如下:[k(4k + 2)0(2k + 1)]其中k是第k个矩阵。

我知道如何存储这些内容。举个例子,我知道我可以通过以下方式连续获得:

(define ones (cons-stream 1 ones))

和连续的整数流:

(define integers (cons-stream 1 (add-streams ones integers)))

所以,我想要一个连续的矩阵流,它们采用上述格式。也就是说,第一个(车流)将是由[1 6 0 3]表示的矩阵,然后是由[2 10 0 5]表示的矩阵,然后是由[3 14 0 7]表示的矩阵。

所以,我知道它会是这样的:

(define start-matrix '(1 6 0 3))

(define init-stream (cons-stream start-matrix 
                             (add-streams ___________
                                          init-stream)))

下划线是“我认为”是缺失的部分。我已从此帖中删除了“添加流”程序以清除我的帖子。

***编辑:已实现我认为我的“起始矩阵”必须是1 6 0 3,而不是1 4 0 2.

但是必须有一种方法可以将1 4 0 2添加到第k个矩阵。

1 个答案:

答案 0 :(得分:1)

好的,首先,您意识到您必须定义自己的添加流版本才能添加矩阵? (我意识到这可能是你编辑过的东西)。

其次,您能否看到SICP示例与您的版本之间缺少什么?在SICP示例中,有一个提供1s恒定流的函数。 1是添加到整数流的每个新元素的内容。现在,您想要添加到 init-stream 流的每个新成员。当然你可以弄清楚那是什么?我的意思是,如果你有时间添加它并且你做了k次...(你提到它很多次,你必须知道它是什么)。所以你所缺少的是一个能够为这一事物提供源源不断的功能。

第三,您是否意识到为什么SICP示例会添加 one 流中的新元素,而不是每次只添加1? (有一个原则被证明)。

第四,您是否看到 init-stream 不是此功能的好名字? init-stream 表示通用函数,而您正在定义返回非常特定的流的内容。为什么不按照SICP命名示例并将其命名为它返回的内容?

我的第三和第四个问题无需为您解决问题;我只是想知道你是否掌握了这一点。