(Haskell)你如何用折叠来评估多项式?

时间:2016-05-21 10:30:16

标签: haskell

给定一个数字x和一个列表[a_0,a_1,.....,a_n],您应该实现一个函数“poly”,其结果应为

poly = a_0 + a_1*x + a_2*x^2 + .... + a_n*x^n.

如何仅使用fold

1 个答案:

答案 0 :(得分:1)

由于这似乎是一项家庭作业,我只会给出一些提示:

  1. 在文件myfile.hs

    中记下函数的简化类型签名
    module MyFile where
    
    evalPolynomial :: Int -> [Int] -> Int
    evalPolynomial x coeffs = undefined
    
  2. 或者您可以编写评估

    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或更新。

  3. 将文件加载到ghci中,看看它是否正常工作

  4. 删除evalPoly的类型签名并再次将文件加载到GHCi

    $ > ghci myfile.hs
    MyFile*> :type evalPoly
    evalPoly :: Num a => a -> [a] -> a
    
  5. 并将其添加到您的文件而不是简化版本。 最后一步使您的函数具有多态性,即您可以将其与DoubleIntInteger以及Num类实例的所有类型一起使用(想一想比如Java接口 - 如果你对它更熟悉的话)