0

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

该流的流车将是矩阵 [1 6 0 3];也就是说,第 1 行 col 1 为 1,第 1 行 col 2 为 6,第 2 行 col 1 为 0,第 2 行 col 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 个矩阵。

4

1 回答 1

1

好的,首先,您意识到您必须定义自己的add-streams版本来进行矩阵加法?(我意识到这可能是您编辑掉的内容)。

其次,您看不出 SICP 示例和您的版本之间缺少什么吗?在 SICP 示例中,有一个函数提供恒定的 1 流。1 是添加到整数流的每个新元素的内容。现在,您要向init-stream流的每个新成员添加一些内容。你肯定能弄清楚那是什么?我的意思是,如果你每次都添加它并且你做了k次......(你提到它很多次,你必须知道它是什么)。因此,您所缺少的只是一个功能,该功能可以提供源源不断的那件事。

第三,您知道为什么 SICP 示例会从 one 流中添加新元素而不是每次都添加 1 吗?(有一个原则被证明)。

Fourthly, do you see that init-stream is not a good name for this function? init-stream indicates a general purpose function, whereas you are defining something that returns a very specific stream. Why not just follow the SICP naming examples and name it for what it returns?

My third and fourth questions needn't be answered for you to solve your problem; I'm just interested to know if you grasp the point.

于 2012-10-15T12:26:02.080 回答