python - 从命令式编程到函数式编程的转换 [Python 到标准 ML]

标签 python recursion parameters functional-programming sml

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

例如: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/

相关文章:

python - 我如何停止一次发射超过 1 颗子弹?

python - matplotlib中轴标签文本顶部的位置是什么?

python - 遍历不终止的批处理脚本

C 递归 Collat​​z 猜想,直到值小于原始整数

c# - 递归失败

perl - Perl 参数列表中的美元、at 符号和分号字符是什么意思?

perl - 不能使用未定义的值作为符号 perl

python - Scrapyd 和单蜘蛛的并行/性能问题

javascript - JavaScript 递归函数调用中变量的最终值

javascript - 为对象javascript分配参数值