Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala中的Curry函数_Scala - Fatal编程技术网

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
      类型的参数,它可以以与任何其他函数相同的方式传递给其他函数。函数
      产品
      的第一个参数应为中的
      类型