scala中如何用高阶函数计算表的阶乘

b09cbbtk  于 2021-07-14  发布在  Java
关注(0)|答案(2)|浏览(325)

我试图使用下面代码中的高阶函数计算假设列表(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

vm0i2vca

vm0i2vca1#

存在多个问题: factorialInt => Int 但你用过
Int => Unit foreach 退货 Unit 所以打印结果总是会
() myHigherOrderFun 退货 Unit 所以它不是一个真正的函数。
这是一个更好的写作方法:

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

myHigherOrderFn(factorial, intiList).foreach(println)
bwitn5fc

bwitn5fc2#

问题是阶乘的返回类型是 Int => Unit . 应该是的 Int => Int 因为它接受一个整数并返回一个整数。
你需要像这样改变你的定义。

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

相关问题