Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala:便利构造函数,一个懒惰且不需要延迟的构造函数_Scala_Functional Programming_Delay_Lazy Evaluation - Fatal编程技术网

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)