Haskell中指数函数的泰勒序列

时间:2017-02-04 21:04:36

标签: haskell taylor-series

我试图为指数函数实现泰勒序列,并且我得到了大量的错误,我不能完全理解,因为所有代码段本身都有效...有人可以解释错误和解决方法请:

top x = map (x^) [0..]
bottom = foldr (*) 1 [1..]
whole x = zipWith (/) (top x) bottom

提前致谢!

2 个答案:

答案 0 :(得分:6)

好的,我明白了。问题是bottom实际上并不是所有可能的因子列表。

要解决此问题,我必须使用scanl代替foldr

bottom = scanl (*) 1 [1..]

答案 1 :(得分:1)

您可以在GHCi中单独测试每个功能,看看它是否与您设计的相同。

例如,您对bottom

的第一个定义
Prelude> bottom = foldr (*) 1 [1..]
Prelude> :t bottom
bottom :: (Num b, Enum b) => b

没有列出清单。这显然不是zipWith

的正确输入
Prelude> :t zipWith
zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]

与正确的

相比
Prelude> bottom = scanl (*) 1 [1..]
Prelude> :t bottom
bottom :: (Num b, Enum b) => [b]

列出了一个清单。