2

まだ Coursera Scala コースの hw1 に取り組んでいますが、case ステートメントとタプルに問題があります。

object Pascal {
    def main(args: List[String]) = {
        require((args length) == 2, "args length must equal 2")
          println("calling pascal on " + (args head) + " and " + (args last))
          pascal((args head) toInt, (args last) toInt)
    }
    def pascal(c: Int, r: Int): Int = {
        require(((r >= 0) && (c >= 0))
            && (c > r + 1), "r and c must be >= 0 and c must be <= r + 1")
        (c, r) match {
            case (_, 0) => 1
            case (0, _) => 1
            case (1 + r, _) => 1 // error: value not found "+"
            case (_, _) => pascal(r-1,c-1) + pascal(r-1,c-1)
        }
    }
}

これを Scala でコーディングする方法を教えてください。

case (1 + r, _) => 1
4

2 に答える 2

4

私はあなたがこのようなものを探していると信じています:

case (v, _) if(v == r + 1) => 1

cwhich は(以前に一致したものを除く)の任意の値に一致し、次に等しいc == 0かどうかを確認するテストを適用しますvr + 1

于 2012-12-23T17:11:07.580 に答える
3

あなたもすることができます

val R = r+1
(c, r) match {
  case (0, _) => 1
  case (R, _) => 1
  case (_, _) => pascal(r-1, c-1) + pascal(r-1,c)
}

(再帰が間違っていることに注意してください--同じエントリを 2 回追加します!-- (_, 0)r が 0 の場合、c が 0 (ケースによってキャッチされる) であるか、c が r+1 であるため、そのケースは不要です。 、その場合に引っかかります。)

于 2012-12-23T19:01:37.690 に答える