【发布时间】:2014-01-14 20:40:51
【问题描述】:
所以我正在尝试做一些数论工作,我使用的是 Mathematica,但认为 Haskell 更适合处理无限列表(因为 AFAIK Mathematica 没有惰性求值)。我想要做的是让 Haskell 将 1/x 的所有数字存储在一个无限的惰性列表中。到目前为止,我的搜索还没有找到一种方法来将比率拆分为返回数字列表而不是实际浮点数的数字。
【问题讨论】:
-
@SamYonnou 指出了正确的方向。然而,在你进入一些琐碎的东西之前,请记住 Haskell 有非常好内置的 bignum 支持:Integer 类型。可能仍然需要摆弄比特,但可能不需要。记得尽可能使用 quotrem 而不是 divmod。
-
您可能会发现这个 StackExchange 帖子很有趣:“使用惰性列表的功能样式?”:mathematica.stackexchange.com/questions/838/… 这个问题启发了 Mathematica 包,其中一个答案引用了它。
-
@SamYonnou,该页面有我需要的答案。谢谢。最终代码为:
nDigRat :: Int -> Int -> Int -> IntnDigRat num denom n = floor (fromIntegral (10*(10^(n-1)*num `rem` denom)) / fromIntegral denom) `rem` 10decExpansionRecipRat :: Int -> [Int]decExpansionRecipRat n = map (nDigRat 1 n) [1..]` -
kocho - 你应该把它作为答案发布,这样更容易阅读
标签: haskell lazy-evaluation number-theory