scala中的Curry函数
我可以这样回答执行结果:scala中的Curry函数,scala,Scala,我可以这样回答执行结果: 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) } 但是我不明白这段代码 product(f)(a+1,b)有人能给我
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)
}
但是我不明白这段代码
product(f)(a+1,b)
有人能给我解释一下这一行吗?product
是一个递归函数。让我们仔细分析一下
// 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
,在本例中,它是从Int
到Int
的函数。此外,它接受a
和b
,这两个都是int。对于此功能,a
和b
将是应用产品
功能的时间间隔
现在,你不明白的部分是:
product(f)(a+1,b)
对。基本上,它的作用是在将f
应用于a
之后,需要将f
应用于间隔中的其余值。也就是说,由于a
已完成,因此需要从下一个整数值开始计算,该整数值是a+1
乘积
是一个递归函数。让我们仔细分析一下
// 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
,在本例中,它是从Int
到Int
的函数。此外,它接受a
和b
,这两个都是int。对于此功能,a
和b
将是应用产品
功能的时间间隔
现在,你不明白的部分是:
product(f)(a+1,b)
对。基本上,它的作用是在将f
应用于a
之后,需要将f
应用于间隔中的其余值。也就是说,由于a
已经完成,您需要从下一个整数值a+1
开始计算代码块product(f)(a+1,b)
是方法product
的调用,参数为:f
,a+1
和b
更多详情:
product
是一个具有多个参数列表的递归高阶函数
- 它是递归的,因为它的主体中有对自身的调用
- 它是高阶的,因为它将函数作为参数(请参阅)
- 它有两个参数列表(请参见):
- 第一个由单个参数组成:函数
李>f:Int=>Int
- 第二个包含两个参数:
和a:Int
b:Int
- 第一个由单个参数组成:函数
- 代码块
产品(f)(a+1,b)
是方法产品的调用,参数为:f
,a+1
和b
更多详情:
product
是一个具有多个参数列表的递归高阶函数
- 它是递归的,因为它的主体中有对自身的调用
- 它是高阶的,因为它将函数作为参数(请参阅)
- 它有两个参数列表(请参见):
- 第一个由单个参数组成:函数
f:Int=>Int
李>
- 第二个包含两个参数:
a:Int
和b:Int
首先,让我们了解一下什么是咖喱功能。通常,curry函数在两个括号中有两个函数参数。当我们指定一个参数时,函数将返回另一个只有一个参数的函数。例如:
def product(f:Int => Int)(a: Int, b: Int): Int
在product(f)(a+1,b)
中,与上述示例的唯一不同之处在于f
是一个函数,并且该函数也可以在scala中被视为一个参数。首先,让我们了解什么是curry函数。通常,curry函数在两个括号中有两个函数参数。当我们指定一个参数时,函数将返回另一个只有一个参数的函数。例如:
def product(f:Int => Int)(a: Int, b: Int): Int
而且,在产品(f)(a+1,b)
中,与上述示例的唯一区别在于f
是一个函数,该函数也可以在scala中被视为一个参数。您不明白什么product
是递归函数product(f)这一行?Scala允许您将函数作为参数传递,因此f
被定义为一个函数,它接受Int
并返回Int
。您可以看到它的一个示例实现:product(x=>x*x)(3,4)
。在这种情况下,函数只是将传递的Int
相乘。在产品内部,a
(它是3)的值被传递到else
块f(a)
中的函数中,您不明白什么product
是递归函数product(f)这一行?Scala允许您将函数作为参数传递,因此f
被定义为一个函数,它接受Int
并返回Int
。您可以看到它的一个示例实现:product(x=>x*x)(3,4)
。在这种情况下,函数只是将传递的Int
相乘。在产品内部,a
(它是3)的值被传递到else
块f(a)
中的函数中,(f)是什么意思?(a+1,a)是f的参数或产品的参数?(a+1,b)是(f)
可以使用的产品参数f
有一个函数作为product
的一个参数,那么(f)是什么意思?(a+1,a)是f的参数或产品的参数?(a+1,b)是(f)
可以使用的产品参数f
有一个函数作为product
的参数,但是f应该有一个Int参数f:Int=>Int
,对吗?为什么产品(f)没有任何f参数,这有助于澄清。感谢f
本身就是一个Int=>Int
类型的参数,它可以以与任何其他函数相同的方式传递给其他函数。函数产品的第一个参数应为中的类型