Eta*_*tam 5 recursion scala tail stream
运行:
lazy val s: Stream[Int] = 1 #:: 2 #:: {val x = s.tail.map(_+1); println("> " + x.head); x}
s.take(5).toList
Run Code Online (Sandbox Code Playgroud)
我期待:
> List(2, 3)
> List(2, 3, 4)
List(1, 2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)
我得到:
> 3
List(1, 2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)
你能解释一下吗?
你得到一个Int
而不是一个的原因List
是它s
是一个整数流,所以它包含整数,而不是列表.
你得到3的原因是(1,2,3,4,5,...)(即s
)的尾部是(2,3,4,5,...)并且如果你将+1映射到那个,你会得到(3,4,5,6,7,...),那个头是3.
仅打印一个整数的原因是表达式仅被评估一次以获得尾部的流.之后,仅s.tail.map(_+1)
评估返回的流(不包含任何打印语句).