ATS列表中reduce运算符的名称是什么?

时间:2016-11-07 15:00:48

标签: ats

说我想总结一下列表中的整数。我可以通过在列表中应用reduce运算符来使用初始值0和加法函数来完成此操作。 ATS中reduce运算符的名称是什么?

1 个答案:

答案 0 :(得分:1)

名称'reduce'有点含糊不清。它可能意味着reduceLeft或reduceRight。在ATS中,'reduce'被称为'fold'。有'foldleft'和'foldright',前者是尾递归的,后者则不是。例如,sumup可以按如下方式实现:

//
fun
sumup(xs: list0(int)): int =
  (xs).foldleft(TYPE{int})(0, lam(r, x) => r+x)
//
// If dot-notation is to be spared, please write:
fun
sumup(xs: list0(int)): int =
   list0_foldleft<int><int>(xs, 0, lam(r, x) => r+x)
//

也可以使用foldright:

fun
sumup(xs: list0(int)): int =
  (xs).foldright(TYPE{int})(lam(r, x) => r+x, 0)

但如果sumup是一个非常长的列表(例如,包含100万个元素),则此版本的xs可能会导致堆栈溢出。