仍在使用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
答案 0 :(得分:4)
我相信你正在寻找这样的东西:
case (v, _) if(v == r + 1) => 1
将匹配c
的任何值(之前匹配的c == 0
除外),然后应用测试来检查v
是否等于r + 1
答案 1 :(得分: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,由该情况捕获。)