1
hronro 2020-07-31 21:06:48 +08:00
哪些语言你倒是说出来啊
|
2
hoyixi 2020-07-31 21:18:54 +08:00
只看这一行,感觉是你用的不对,为啥不先 take
|
3
shiroikuma OP @hronro 比如 scala 。haskell 的 fusion 支持好像也很一般。还有 js(不知道算不算函数式
|
4
shiroikuma OP @hoyixi 只是举个很极端的例子,chain 的时候少不了很多分段操作。像 java 只有在碰到终止操作的时候才进行遍历
|
5
yangbonis 2020-07-31 21:39:19 +08:00 via iPhone
你是说 compose 吗? 这应该自己调用。
|
6
mind3x 2020-08-01 05:39:25 +08:00
@shiroikuma Scala 啥时候宣称过是惰性求值了。你要 Lazy 的话自己包个 lazy view:
立即求值 scala> List(1,2,3).map(_*2).take(2) val res18: List[Int] = List(2, 4) Lazy scala> List(1,2,3).view.map(_*2).take(2) val res16: scala.collection.SeqView[Int] = SeqView(<not computed>) Lazy+执行 scala> List(1,2,3).view.map(_*2).take(2).toSeq val res17: Seq[Int] = List(2, 4) |
7
Balthild 2020-08-01 20:55:31 +08:00
语言是否为惰性求值,和组合子是否为惰性求值,两者没有必然联系。比如 Rust 本身是严格求值的,但它的迭代器组合子都是惰性的。
此外,Scala 、JS 都不是惰性求值的语言。 |