我正在完成本书的练习和概念:Scala中的函数编程.假设我需要定义一个constant函数,该函数按给定值返回无限流.
这是我的版本:
def constant[A](a: A): Stream[A] = Stream.cons(a, constant(a))
Run Code Online (Sandbox Code Playgroud)
和GitHub中的答案:
def constant[A](a: A): Stream[A] = {
lazy val tail: Stream[A] = Cons(() => a, () => tail)
tail
}
Run Code Online (Sandbox Code Playgroud)
评论说后者比前者更有效,因为它只是一个引用自身的对象.我无法理解这一点,任何帮助都将不胜感激.(抱歉我的英语不好:)
给定
val xs1 = Set(3, 2, 1, 4, 5, 6, 7)
val ys1 = Set(7, 2, 1, 4, 5, 6, 3)
Run Code Online (Sandbox Code Playgroud)
xs1而ys1这两个结果scala.collection.immutable.Set[Int] = Set(5, 1, 6, 2, 7, 3, 4)
但较小的波纹管
val xt1 = Set(1, 2, 3)
val yt1 = Set(3, 2, 1)
Run Code Online (Sandbox Code Playgroud)
生产
xt1: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
yt1: scala.collection.immutable.Set[Int] = Set(3, 2, 1)
Run Code Online (Sandbox Code Playgroud)
为什么不订购前者而订购后者似乎呢?