我有一个函数规范,声明它应该评估一个变量的多项式函数。函数的系数以列表形式给出。它还接受变量的值作为实数。
例如: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
关于python - 从命令式编程到函数式编程的转换 [Python 到标准 ML],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2313141/