我有這個迭代函數來計算列表中布爾值的數量。斯卡拉遞歸計算給定謂詞的元素
def countBoolIter[A](test: A=>Boolean, a: List[A]) = {
var count = 0
for(elem <- a){
if(test(elem)) count += 1
}
count
}
傳入的第一個參數是isBool
功能:
def isBool(i: Any) = i match {
case _: Boolean => true
case _ => false
}
調用函數如下:
countBoolIter(isBool, List(1, true, 3, true, false, "hi"))
// Output: 3
現在,我試着將它轉換成尾遞歸功能如下:
def countBoolRec[A](test: A=>Boolean, a: List[A], acc: Int = 0): Int = a match {
case Nil => acc
case h :: t if(test(h)) => countBoolRec(test, a, acc+1)
case h :: t => countBoolRec(test, a, acc)
}
但是,我得到一個運行時錯誤,因爲函數不返回任何東西;沒有錯誤拋出。我認爲它陷入了一個無限循環,這就是爲什麼沒有返回。
問題:我應該如何解決我嘗試的遞歸實現?
「我應該如何解決我試圖遞歸實現?」這是在調試器中逐步解決的那些問題之一。現在人們不使用調試器嗎?然後離開我的草坪。 –