给定一个数字x
和一个列表[a_0,a_1,.....,a_n]
,您应该实现一个函数“poly
”,其结果应为
poly = a_0 + a_1*x + a_2*x^2 + .... + a_n*x^n.
如何仅使用fold
?
答案 0 :(得分:1)
由于这似乎是一项家庭作业,我只会给出一些提示:
在文件myfile.hs
module MyFile where
evalPolynomial :: Int -> [Int] -> Int
evalPolynomial x coeffs = undefined
或者您可以编写评估
a_0 + a_1*x + a_2*x^2 + .... + a_n*x^n ==
a_0 + x*(a_1 + x*(a_2 + x*(...(x*(a_(n-1) + x * (a_n))...)))
第二个已经适合作为fold
工作。
有一点需要注意阅读文档 - 最近foldX
的类型签名已更改为更一般的版本,因此如果您感到困惑,请查看base-4.7.0.2/Data.List而不是{{3或更新。
将文件加载到ghci中,看看它是否正常工作
删除evalPoly
的类型签名并再次将文件加载到GHCi
$ > ghci myfile.hs
MyFile*> :type evalPoly
evalPoly :: Num a => a -> [a] -> a
并将其添加到您的文件而不是简化版本。
最后一步使您的函数具有多态性,即您可以将其与Double
,Int
,Integer
以及Num
类实例的所有类型一起使用(想一想比如Java接口 - 如果你对它更熟悉的话)