Scala:便利构造函数,一个懒惰且不需要延迟的构造函数
我的任务是创建一个所谓的“便利构造函数”,它应该用于构造下面给定分支的实例。约束条件是构造函数应该是惰性的,并且不需要任何显式延迟。 完整任务在以下位中描述:Scala:便利构造函数,一个懒惰且不需要延迟的构造函数,scala,functional-programming,delay,lazy-evaluation,Scala,Functional Programming,Delay,Lazy Evaluation,我的任务是创建一个所谓的“便利构造函数”,它应该用于构造下面给定分支的实例。约束条件是构造函数应该是惰性的,并且不需要任何显式延迟。 完整任务在以下位中描述: object Q5 { /** * Task 5. * * Consider a type of lazy binary trees: */ trait Tree[+A] case class Branch[+A] (l:() => Tree[A], r:() => Tree[A]) e
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转换成无参数函数——但我不完全确定这是否正确,也不知道我的任何尝试是否成功。最后,我不确定“显式延迟”可以推断出什么,但我认为这意味着评估是在每个级别上进行的,而不是在找到最深的节点之后(并行化的目的)
如果任何人有任何澄清或可能的解决方案,如何使一个懒惰的,而不是显式延迟的“方便构造函数”,这将是高度赞赏 显式延迟可能是指使用了
lazy
关键字。这个问题在“但不需要像Branch那样使用显式延迟”中自相矛盾。参数中使用“=>X”是显式延迟。你真的应该问给你任务的人“显式延迟”是什么意思,这不是一个有固定定义的广泛使用的术语。显式延迟可能指的是lazy
关键字的用法。这个问题在“但不要求使用分支之类的显式延迟”中自相矛盾。“=>X”的用法在争论中是显式延迟。你真的应该问给你任务的人他们所说的“显式延迟”是什么意思,这不是一个有固定定义的广泛使用的术语。给定“但不需要像分支那样使用显式延迟”。这个答案不自相矛盾吗?问题本身不矛盾吗?我解释为“不需要使用显式延迟”,因为调用者不需要使用它们。因此,您可以执行分支(buildLeft(“foo”)、buildRight(“bar”)
,而不是分支(()=>buildLeft(“foo”)、()=>buildRight(“bar”)
。例如,给定“但不需要像分支那样使用显式延迟”。这个答案是否自相矛盾?问题本身不矛盾吗?我解释为“不需要使用显式延迟”,因为调用者不需要使用它们。例如,您可以执行分支(buildLeft(“foo”)、buildRight(“bar”)
,而不是分支(()=>buildLeft(“foo”)、()=>buildRight(“bar”)
。
def branch[A] (l: =>Tree[A], r: =>Tree[A]): Tree[A] = Branch(() => l, () => r)