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
此功能使用哪種折疊(右折疊或左折疊)?怎么看?
該函式的進一步示例呼叫:
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)
uj5u.com熱心網友回復:
你所擁有的相當于,在偽代碼中,
calculate(f, sumProd, n, a, b)
=
fold-right( sumProd, n, map(f, [a .. b]))
其中[a .. b]表示從a到的數字串列b,包括 ,以 為步長增加1。換句話說,它與
=
sumProd( f(a),
sumProd( f(a2),
sumProd( f(a3),
...
sumProd( f(b), n) ... )))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/530713.html
標籤:斯卡拉递归高阶函数折叠
