2

仍在学习 Coursera Scala 课程的 hw1,我遇到了案例语句和元组的问题。

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

它将匹配的任何值c(除了c == 0之前匹配的),然后应用测试来检查是否v等于r + 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)
}

(请注意,你的递归是错误的——你添加了两次相同的条目!——这种情况(_, 0)是不必要的,因为如果 r 为 0,则 c 为 0(被其大小写捕获),或者 c 为 r+1 ,被那个案子抓住了。)

于 2012-12-23T19:01:37.690 回答