【发布时间】:2020-03-25 12:25:52
【问题描述】:
我从这个 SO post 稍微修改了 Daniel Sobral 的主要 Stream 函数:
def primeStream: Stream[Int] => Stream[Int] =
s => s.head #:: primeStream(s.tail filter(_ % s.head != 0))
我正在使用它:
primeStream(Stream.from(2)).take(100).foreach(println)
它工作得很好,但我想知道我是否可以通过以下方式摆脱那个讨厌的Stream.from(2):
def primeStream: def primeStream: () => Stream[Int] =
() => Stream.from(2)
def primeStream: Stream[Int] => Stream[Int] =
s => s.head #:: primeStream(s.tail filter(_ % s.head != 0))
实现:
primeStream().take(100).foreach(println)
但这不起作用。我错过了什么?
我也试过了:
def primeStream: Stream[Int] => Stream[Int] = {
() => Stream.from(2)
s: Stream[Int] => s.head #:: primeStream(s.tail filter(_ % s.head != 0))
}
这是行不通的。
这行得通:
def primeStream2(s: Stream[Int] = Stream.from(2)): Stream[Int] =
s.head #:: primeStream2(s.tail filter(_ % s.head != 0))
但我想了解我错过了什么,以使语法适用于上述更对称的语法,其中有两个并行定义 primeStream 。
【问题讨论】:
标签: scala