2016-06-14 61 views
1

我所做的杨辉三角的实现,但事情是错了,因为当col match { case row => ...}不正确的山坳与行相匹配:模式匹配不匹配给定的变量

def main(args: Array[String]) { 
println("Pascal's Triangle") 
for (row <- 0 to 10) { 
    for (col <- 0 to row) { 
    val res: Int = pascal(col, row) 
    print(res + " ") 
    } 
    println() 
} 

def pascal(col: Int, row: Int): Int = { 
    col match { 
     case 0 => 1 
     case row => 1 
     case _ => pascal(col-1, row-1) + pascal(col, row-1) 
    } 
} 

回答

4

row匹配阴影方法参数。为了实现你想要的,你可以尝试使用所谓的守卫来进行你的模式匹配,例如

case n if n == row => 1 

有了这个,你有3个的情况下,0情况下,的情况下n is equal to given row parameterdefault情况。否则,row匹配将匹配所有不等于0的剩余数字,这将使_匹配永远不会被触发。

+2

当心卫兵 - https://twitter.com/travisbrown/status/714125150711451648 –

+1

感谢您的提示! –

4

或者马丁的回答,您还可以使用反引号为相同的结果:

def pascal(col: Int, row: Int): Int = { 
    col match { 
    case 0 => 1 
    case `row` => 1 
    case _ => pascal(col-1, row-1) + pascal(col, row-1) 
    } 
} 

你可以阅读更多关于此行为,例如,Programming in Scala book的相关章节(搜索反引号关键字)