2017-05-30 37 views
0

我已經被賦予創建一個所謂的「便利構造函數」的任務,它應該可以用來構造下面給出的分支的一個實例。對此的約束是構造函數應該是懶惰的,不應該要求任何明確的延遲。 完整的任務是在以下位描述:Scala:便利構造函數,一個懶惰的構造函數,不需要任何延遲

object Q5 { 

    /** 
    * Task 5. 
    * 
    * Consider a type of lazy binary trees: 
    */ 

    trait Tree[+A] 
    case class Branch[+A] (l:() => Tree[A], r:() => Tree[A]) extends Tree[A] 
    case object Leaf extends Tree[Nothing] 

    /** 
    * Implement a convenience constructor 'branch' that is both lazy 
    * but does not require using explicit delays like Branch. 
    */ 

    def branch[A] (l : =>Tree[A], r: =>Tree[A]) :Tree[A] = //TODO: Solve this 

} 

我的假設是,我應該以某種方式改變L和R爲無參數的功能 - 但我不能完全肯定,如果這是正確的,也沒有任何的我的嘗試成功了。最後,我不確定什麼是由「顯式延遲」推斷的,但我認爲這意味着評估是在每個級別完成的,而不是在找到最深的節點(並行化目的)之後完成的。

如果任何人有任何澄清或可能的解決辦法來如何做一個懶惰的,而不是明確推遲'便利構造',它將不勝感激!

+0

顯式延遲可能是指'lazy'關鍵字的用法。 – arboreal84

+0

這個問題自相矛盾,但「並不要求像Branch一樣使用明確的延遲」。參數*中「=> X」的使用是明顯的延遲。 – pedrofurla

+1

你真的應該問誰給你任務什麼_they_意思是「明顯的延遲」,這不是一個廣泛使用的術語,有一個固定的定義。 –

回答

2
def branch[A] (l: =>Tree[A], r: =>Tree[A]): Tree[A] = Branch(() => l,() => r) 
+1

給定「但不要求使用像Branch一樣的顯式延遲。」這個答案不是自相矛盾嗎?這個問題不矛盾嗎? – pedrofurla

+0

我解釋爲「不需要使用顯式延遲」,因爲*調用者*不需要使用它們。所以你可以做'branch(buildLeft(「foo」),buildRight(「bar」))'而不是'Branch(()=> buildLeft(「foo」),()=> buildRight(「bar」))例如。 –

相關問題