You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

判断Scala递归计算函数采用right-fold还是left-fold及依据

该Scala折叠函数的类型判断(Right-fold还是Left-fold)
def calculate(f: Int => Int, sumProd:(Int, Int)=>Int, n: Int, a:Int, b:Int):Int =
  if (a>b) n 
   else sumProd(f(a), calculate(f, sumProd, n, a+1, b))

这个Scala函数可在指定数值区间[a,b]内执行自定义计算:

示例调用

calculate(x=>2*x, (x,y)=>x+y, 0, 2 , 4)

此调用计算:2*2 + 2*3 + 2*4 = 18

问题

请判断该函数使用的是right-fold还是left-fold,并说明判断依据?

判断结论与依据

这是Right-fold(右折叠),核心依据如下:

  • 递归执行逻辑:Right-fold的本质是先递归处理最右侧的元素,再从右向左逐步合并结果。该函数中,当a <= b时,会优先递归调用calculate(..., a+1, b)处理下一个更靠右的元素,直到a > b时返回初始值n,随后才将当前元素的映射值f(a)与递归返回的结果传入sumProd进行合并。
  • 计算顺序验证:以第一个示例为例,实际计算的嵌套顺序是2*2 + (2*3 + (2*4 + 0)),完全符合右折叠从最右端开始,结合初始值向左依次合并的特征。

补充示例调用

calculate(x=>2+x, (x,y)=>x*y,1, 2 , 4)
calculate(x=>2+x, (a,b)=>a+b,0, 1, 5)
calculate(x=>2*x, (a,b)=>a+b,0, 1, 5)

内容的提问来源于stack exchange,提问作者scalaquestions

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 01:05:19