2015-04-20 85 views
-1

我需要在Scala中進行這種尾遞歸的幫助。我有以下方法標題:尾遞歸斯卡拉

def filter[A](list:List[A], filter: A => Boolean): List[A] = 

我必須寫有尾遞歸和使用與h::tNil匹配一個cases方法體,但我不知道如何與Booleans做到這一點?

我試圖與在尾遞歸式的計數List另一個例子:

def sum(list:List[Int]):Int = { 
    def sumRec(list: List[Int], acc:Int): Int = list match { 
     case Nil => acc 
     case h::t => sumRec(t,acc+h) 
    } 
    sumRec(list,0) 
} 

@ OM-NOM-NOM你能幫我多一個遞歸,我在斯卡拉解決? 我需要通過遞歸將元素映射到給定的長度。 下面是應該完成的代碼:

def map[A,B](list:List[A], operation:A=>B):List[B] = 

回答

3

我不會爲您提供完整的答案,但這裏是提示:您的第二個參數是一個測試功能,可以調用在每個項目的收集,以決定它是否應該被丟棄與否:

scala> def isOdd(x: Int) = x % 2 == 1 
isOdd: (x: Int)Boolean 

scala> val filter: Int => Boolean = isOdd 
filter: Int => Boolean = <function1> 

scala> filter(3) 
res0: Boolean = true 

scala> filter(4) 
res1: Boolean = false 

既然你已經釘遞歸之和牢記,在累加器的類型可以是列表,這應該足以解決你的問題。

+0

好的,謝謝你的提示! – Bajro