object answer {
def product(f:Int=>Int)(a:Int,b:Int):Int =
if (a>b) 1
else f(a) * product(f)(a+1,b)
product(x=>x*x)(3,4)
def fact(n:Int) = product(x=>x)(1,n)
}
我可以像这样回答这次执行的结果:
// 3*3* product(f)(4,4)
// 3*3 * (4*4) * product(f)(5,4)
// 3*3 * 4*4 * 1
// 3*3 * 4*4
// 144
但是我不理解这段代码
product(f)(a+1,b)
任何人都可以向我解释这条线?
答案 0 :(得分:2)
product
是一个递归函数。让我们分析一下。
def product(f:Int => Int)(a: Int, b: Int): Int
product
接收f
,在这种情况下是Int
到Int
的函数。此外,它还包括a
和b
这两个都是整数。对于此函数,a
和b
将是product
函数将应用于的时间间隔。
现在,您不理解的部分是:product(f)(a + 1, b)
对。基本上,它的作用是在您将f
应用于a
后,您需要将f
应用于您的时间间隔中的其余值。也就是说,自a
完成后,您需要从下一个整数值a + 1
开始计算。
答案 1 :(得分:2)
代码块product(f)(a+1,b)
是方法product
的调用,其参数为:f
,a+1
和b
。
更多详情:
product
是一个带有多个参数列表的递归高阶函数。
f:Int=>Int
; a: Int
和b: Int
。答案 2 :(得分:1)
首先,让我们弄清楚什么是咖喱功能。通常,咖喱功能在两个括号中有两个功能参数。当我们指定一个参数时,该函数将返回另一个只有一个参数的函数。例如:
def sumInt1(a: Int)(b: Int): Int = {a + b}
def sumInt2(c: Int): Int = sumInt1(3)(c)
val test = sumInt2(5) // test: 8
并且,在product(f)(a+1,b)
中,仅与上述示例不同的是f
是一个函数,并且该函数也可以在scala中被视为参数。