我有一个函数说明,指出它应该评估一个变量的多项式函数.函数的系数以列表形式给出.它还接受该变量的值作为实数.
例如:eval(2,[4,3,2,1])= 26(1 * x ^ 3 2 * x ^ 2 3 * x ^ 1 4 * x ^ 0,其中x = 2)
这是python中的函数,但是我不确定如何将其转换为SML.我在寻找一种方法来传递迭代值而不更改函数参数时遇到麻烦.它需要保持真实的*真实列表->真正的功能.
def eval(r, L):
sum = 0
for i in range(0, len(L)):
sum = sum + L[i] * (r ** i)
return sum
解决方法:
用功能语言表示总和的通常方法是折叠.通过在每次迭代中将总和乘以r,可以摆脱对索引的需要(以及将int提升为另一个int的幂的函数):
fun eval radix lst = let
fun f (element, sum) = sum * radix + element
in
foldr f 0 lst
end
现在可以像下面这样使用该函数:
- eval 10 [1,2,3];
val it = 321 : int