【问题标题】:Implementing Stream Integer for Coefficients为系数实现流整数
【发布时间】:2014-10-25 03:37:27
【问题描述】:

作为我正在自学的homework(自 2013 年起)的一部分,请考虑以下背景:

基本思想是使用形式的生成函数

a0 + a1*x + a2*x^2 + · · · + an*x^n + . . .

其中 x 只是一个“形式参数”(也就是说,我们实际上永远不会用任何值替换 X;我们只是将它用作占位符)并且所有系数 ai 都是 整数。我们将存储系数 a0, a1, a2, 。 . .在流中 整数。

我尝试实现x :: Stream Integer

注意到 x = 0 + 1x + 0x^2 + 0x^3 + 。 . . .

x :: Stream Integer
x = Cons 0 (Cons 1 $ streamRepeat 0)

对于以下定义:

data Stream a = Cons a (Stream a)

streamRepeat :: a -> Stream a
streamRepeat x = Cons x (streamRepeat x)

我的x 实现是否正确?我不确定,鉴于上述背景,我是否正确捕获了 a0、a1、...、an 的系数。

【问题讨论】:

    标签: haskell


    【解决方案1】:

    是的,没错。您可以通过添加共享来稍微改进streamRepeat 的定义,但这对于家庭作业的目的来说并不重要。

    【讨论】:

    • 您能多说一些关于分享的事情吗?
    • @KevinMeredith 你可以使用Data.Function.fix: streamRepeat x = fix (Cons x)。这会为您“打结”。或者,您可以执行streamRepeat x = let x' = Cons x x' in x',这意味着您的流的尾部指向内存中与流头部相同的位置,然后流的尾部指向内存中的相同位置作为原始尾部.
    • @KevinMeredith I drew a picture 试图帮助解释这是在做什么。基本上,当您像这样定义streamRepeat 时,您会告诉它某些值不仅相等,它们实际上是相同的。这允许编译器共享这些值并进行大量优化。
    猜你喜欢
    • 2011-07-15
    • 2010-12-21
    • 2015-11-16
    • 1970-01-01
    • 2022-01-20
    • 2020-09-25
    • 2022-12-10
    • 2019-03-25
    • 1970-01-01
    相关资源
    最近更新 更多