【问题标题】:Scheme streams of matrices矩阵的方案流
【发布时间】:2012-10-15 05:53:37
【问题描述】:

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

这个流的流车将是矩阵[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 个矩阵。

【问题讨论】:

  • 不清楚你的问题是什么。您对以上哪一部分有问题?
  • 嗨,它的布鲁斯。感谢您阅读本文。我只想要描述格式的矩阵流。即 [1 6 0 3] 然后 [2 10 0 5] 然后 [3 14 0 7]。它不断地用这种模式制作一个矩阵流。实际模式是 [k (4k+2) 0 (2k+1)] 我通过删除“添加流”的定义和映射过程来稍微清理一下我的帖子。没有它们,我想要什么应该很明显。
  • 是的,你想要一个无限流。创作的哪一部分你不知道该怎么做?还是您只是希望人们编写您尚未编写的所有代码?
  • 不,一点也不。我在上面说“我知道它应该是……”。我错过了一个关键部分。相信我,我已经花了几个小时试图弄清楚这一点,但没有任何运气。
  • 是的,但是由于您的答案除了基本规范之外缺少有关您想法的所有内容,那么其他人怎么能知道您缺少哪个关键部分?这就像说“我想造一辆汽车”,却没有解释是轮子还是引擎打败了你。

标签: scheme sicp r5rs


【解决方案1】:

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

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

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

第四,你有没有看到 init-stream 不是这个函数的好名字? init-stream 表示通用功能,而您正在定义返回非常特定流的东西。为什么不直接按照 SICP 命名示例并根据它返回的内容来命名它?

我的第三个和第四个问题不需要回答你来解决你的问题;我只是想知道你是否明白这一点。

【讨论】:

  • 嘿,谢谢布鲁斯,这些都是很好的建议。是的,我让它工作了!我确实必须像你说的那样使用 add-streams 方法,只是修改过。所以我写了一个 add-2x2 来做基本的矩阵加法,并在这个过程中使用了 SICP 流图。我还必须像您提到的“第三次”那样重建流,以产生要连续添加的矩阵的恒定流。早些时候看到你的帖子,但只能通过我的手机访问堆栈。想写信感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-01
  • 1970-01-01
  • 2019-02-10
  • 2011-08-15
相关资源
最近更新 更多