2016-03-15 70 views
2

它應該檢查一個Stream(that)是否是另一個(this)的前綴。Scala實現startsWith在流上

例如,Stream(1,2,3)startsWith Stream(1,2)將爲true。

這是我的實現,但它總是返回false!

任何人都可以告訴我爲什麼,也可以發佈更正?

def startsWith[B >: A](that: Stream[B]): Boolean = (this, that) match { 
    case (_,Empty) => true 
    case (Cons(h,t),Cons(h2,t2)) if h == h2 => t().startsWith(t2()) 
    case _ => false 
} 

回答

1

我不知道你的數據流是如何實現的,但如果一切都懶,我認爲這個問題是在你的第二個案例:

case (Cons(h,t),Cons(h2,t2)) if h == h2 => t().startsWith(t2()) 

應該

h() == h2() 

否則你比較兩個unevaluate d函數

0
def startsWith[B >: A](that: Stream[B]): Boolean = (this, that) match { 
    case (_,Empty) => true 
    case (Cons(h,t),Cons(h2,t2)) if h() == h2 => t().startsWith(t2()) 
    case _ => false 
+0

你打我吧,但我認爲應該是h()== h2()=> – ddkr

1
stream1.zip(stream2).dropWhile { case (a,b) => a == b }.isEmpty