2010-06-01 47 views
3

如何在Scheme中使用数组?数组/方案

特别是,我试图使用memoization实现递归斐波那契过程。数组是否存在于Scheme中?

如果不是,我该如何实现记忆?

+0

对于这样的问题,指定您正在使用的实现通常非常有用。 Memoization在Scheme中很常见,大多数实现都会附带一些库。 – 2010-06-01 18:05:27

+0

我有一个标签的实现,但似乎sgm编辑出来(可能是正确的,因为我想我是通过使用它创建标签)。我正在使用Pretty Big Scheme(DrScheme)。 – Cam 2010-06-01 18:11:15

+0

其实,我只是从DrScheme的Choose Language菜单中选择了PBS - 我不知道应该使用哪一个。普通PLT和r5rs很受欢迎? – Cam 2010-06-01 18:20:20

回答

5

Scheme中有数组,但它们被称为vectors。请注意,它们不像其他语言(如Perl和Javascript)或类似名称的C++事物那样调整大小;你必须做一个更大的,并复制已过时的内容。

如果您想了解更多关于记忆和动态编程的信息,请阅读免费书籍Concrete Abstractions的第12章。

+2

'他们不调整大小;你必须制作一个更大的文件并复制已过时的文件的内容。“听起来和其他语言的文件完全一样。我应该知道有什么细微差别(比如,在方案向量和C数组之间)?谢谢! – Cam 2010-06-01 17:56:45

+0

我想这个方案向量元素可以像任何其他变量或cons单元一样包含任何对象,而不限于“数组_____”。 – 2010-06-01 18:27:15

1

这不是一个直接的答案,所以随时downvote等:如果你使用PLT和你需要memoization,那么你应该看看戴夫赫尔曼的memoize package。此外,您可以从诈骗库获取memoize功能。

+1

PLT是相当大的计划吗?对于“PLT计划”是什么,我有点困惑。 – Cam 2010-06-01 18:27:05

+2

是的,“漂亮大”是DrScheme语言级别的名称,是您使用的PLT Scheme语言的所有部分。 (目前这个项目正在更名为Racket,部分原因是为了避免混淆。) – 2010-06-01 19:03:39