如何在Scala中使用高阶函数计算列表阶乘

时间:2019-02-21 12:58:55

标签: scala

我试图使用下面的代码中的高阶函数来计算假设List(1,2,3)的Scala列表中存在的元素的阶乘

object HigherOrderFunctionEg{
 def main(args :Array[String]){
  val input = args(0).toInt
    val intiList :List[Int] = List.range(1,input+1)
    def factorial(n: Int): Int = {
      if (n == 0) 
      return 1
      else
      return n * factorial(n-1)
     }
    def myHigherOrderFn (factorial : Int => Unit, intiList : List[Int]) : Unit = 
     {
   intiList.foreach(factorial)
    println(intiList.foreach(factorial))
    }
    myHigherOrderFn(factorial, intiList)
 }
}

当我尝试scala HigherOrderFunctionEg.scala 3时,我得到的输出仅是空括号(),正如我期望的那样 1个 2 6

2 个答案:

答案 0 :(得分:3)

存在多个问题:

  1. factorialInt => Int,但您使用过Int => Unit
  2. foreach返回Unit,因此打印结果将始终为()
  3. myHigherOrderFun返回Unit,因此它实际上不是一个函数。

这是一种更好的编写方式:

def myHigherOrderFn(factorial: Int => Int, intiList: List[Int]): List[Int] =
  intiList.map(factorial)

myHigherOrderFn(factorial, intiList).foreach(println)

答案 1 :(得分:1)

问题在于阶乘的返回类型为Int => Unit。应该是Int => Int

它需要一个整数并返回一个整数。

您需要像这样更改定义。

def myHigherOrderFn (factorial : Int => Int, intiList : List[Int]) : Unit =
    intiList.foreach(e => println(factorial(e)))