从命令式编程到函数式编程的转换[Python到Standard ML]

我有一个函数说明,指出它应该评估一个变量的多项式函数.函数的系数以列表形式给出.它还接受该变量的值作为实数.

例如: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
上一篇:FRM 5.2 资本资产定价模型


下一篇:2018.2.10 使用SSH连接远程滴滴云服务器Ubuntu (Windows下) 及 putty工具永久设置字体、颜色