如何在haskell中计算多项式方程

如何在haskell中计算多项式方程,haskell,Haskell,基本上,我需要在haskell中基于值x计算一个多项式,系数的值需要存储在一个元组列表中 例如,多项式f(x)=a·xn+a1·xn−1 + ... + 一−1·x+an将在元组列表中表示,如f=[(a0,n),(a1,n-1),…,(an-1,1),(an,0)],因此如果我想计算 2*x^2+3*x+3对于x=20我需要列表[(2,2)、(3,1)、(0,3)] 事先非常感谢,如果我用一种混乱的方式解释了这个练习,那就很抱歉了:)简单:把清单翻过来就行了。累加器函数应将当前项(为x求解)添加

基本上,我需要在haskell中基于值x计算一个多项式,系数的值需要存储在一个元组列表中

例如,多项式f(x)=a·xn+a1·xn−1 + ... + 一−1·x+an将在元组列表中表示,如
f=[(a0,n),(a1,n-1),…,(an-1,1),(an,0)]
,因此如果我想计算
2*x^2+3*x+3
对于
x=20
我需要列表
[(2,2)、(3,1)、(0,3)]


事先非常感谢,如果我用一种混乱的方式解释了这个练习,那就很抱歉了:)

简单:把清单翻过来就行了。累加器函数应将当前项(为x求解)添加到累加器中。当然,种子必须为0。

如果您想要基本解决方案,请尝试使用显式递归:

evaluate :: [(Int, Int)] -> Int -> Int
evaluate []             _x = .... -- TODO (1)
evaluate ((a,n) : rest)  x = .... -- TODO (2)
   where
   result = evaluate rest x
在上面的
(1)
中,我们需要指定计算“空”多项式(完全没有系数)的结果。这是递归的基本情况

相反,
(2)
是递归步骤。这里,我们将系数对分成第一个
(a,n)
,以及列表的其余部分
rest
。然后,我们递归地定义
result=evaluate rest x
来计算“没有第一个系数”的多项式,即a1·xn−1 + ... + 一−1·x+an。 然后,在第
(2)
行中,我们需要将这个
结果
与第一个单项式相结合,在
x
中进行计算

您现在应该可以填充这些点了。

类似这样的内容

> peval p x = foldr (\(a,n) s -> s+(a*x^n)) 0 p
> poly = peval [(2,2),(3,1),(3,0)]
> map poly [0..5]

[3,8,17,30,47,68]

calcfx=sum(map(\(coef,exp)->coef*x^exp)f)
[(2,2),(3,1),(0,3)]
应该是
[(2,2),(3,1),(3,0)]
阅读,以获得更有效的方法来计算值。欢迎使用堆栈溢出。Stack Overflow不是一个代码编写服务。对不起,我不知道折叠是什么(这是我学习haskell的第三天)@Alex我有点迷糊;)既然你没有告诉我们你试过什么,我就给出了我能想到的最简短的答案