2

Scala を使用した「関数型プログラミング」の探索を開始しました。関数型プログラミングで値を返す方法を知りたいです。再帰関数を書きました

def calculateSum(mainlist: List[Int]): Int = {
      def Sum(curentElem:Int = 0,thislist:List[Int],): Int = {
       if (list.isEmpty) curentElem
       else loop(curentElem + thislist.head, thislist.tail)
      //curentElem
     }
      Sum((List(0,1,2,3,4)))
      println ("returned from Sum : " + curentElem)

  }
  • 関数の最後の行に「curentElem」を追加する必要があります(コメント行で行っているように)!

更新:問題を解決しました:

object HelloScala  {    
def main(args: Array[String]): Unit = {     
      val s = sum(0, List(0,1,2,3,4))
      println("returned from Sum : " + s )
    }  

def sum(currentElem: Int, thislist: List[Int]): Int = {
      thislist match {
        case Nil => currentElem
        case head :: tail => sum(currentElem + head, tail)
      }

    }
}
4

1 に答える 1

1

本当に結果を印刷したい場合は、そのようにすることができます

def calculateSum(mainlist: List[Int]): Int = {
   def sum(currentElem: Int, thislist: List[Int]): Int = {
      if (thislist.isEmpty) curentElem
      else sum(currentElem + thislist.head, thislist.tail)
      //curentElem
   }
   val s = sum(0, mainlist)
   println("returned from Sum : " + s)
   s
}

そうでない場合:

def calculateSum(mainlist: List[Int]): Int = {
   def sum(currentElem: Int, thislist: List[Int]): Int = {
      if (thislist.isEmpty) curentElem
      else sum(currentElem + thislist.head, thislist.tail)
      //curentElem
   }
   sum(0, mainlist)
}

パターン マッチングを使用する方法 (scala で頻繁に使用します):

def calculateSum2(mainlist: List[Int]): Int = {
    def sum(currentElem: Int, thislist: List[Int]): Int = {
      thislist match {
        case Nil => currentElem
        case head :: tail => sum(currentElem + head, tail)
      }
    }
    sum(0, mainlist)
}

Nil空のリストです。

于 2013-10-30T22:11:12.763 に答える