2016-06-14 77 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的相關章節(搜索反引號關鍵字)