2

if条件が満たされないまで関数を繰り返し、整数を出力する再帰関数があります。ただし、整数を必要とするこの関数の外部の関数は、ユニットを受け取っています。intを返すためにコードを変更するにはどうすればよいですか?

count(r,c,1,0)

   def count(r: Int, c: Int, countR: Int, lalaCount: Int): Int = {
    if (countR < (r + 1)) count(r,c,countR + 1, lalaCount + countR)
    else (lalaCount + c + 1)
   }

これはプログラム全体です

object hw1 {
  def pascal(c: Int, r: Int): Int = {

   count(r,c,1,0)

   def count(r: Int, c: Int, countR: Int, lalaCount: Int): Int = {
    if (countR < (r + 1)) count(r,c,countR + 1, lalaCount + countR)
    else (lalaCount + c + 1)
   }
  } //On this line eclipse is saying "Multiple markers at this line
    //- type mismatch;  found   : Unit  required: Int
    //- type mismatch;  found   : Unit  required: Int
pascal(3,4)

}

4

1 に答える 1

6

から返される値pascalは、そこに含まれる最後の式です。あなたはそれをあなたの評価にしたいのですcountが、それは最後のことではありません。あなたが発見したように、割り当て(def、valなど)はタイプUnitです:

  def pascal(c: Int, r: Int): Int = {

   count(r,c,1,0) // => Int

   def count(r: Int, c: Int, countR: Int, lalaCount: Int): Int = {
    if (countR < (r + 1)) count(r,c,countR + 1, lalaCount + countR)
    else (lalaCount + c + 1)
   } // => Unit
  }

count(r,c,1,0) に移動するだけdefで、問題が解決するはずです。

于 2012-09-30T05:18:17.277 に答える