Stream(無限リストもしくは「リストを作る関数オブジェクトをラップしたリスト by keisuken」)

結構便利かも・・・

val lst = List(0,1,2,3,4,5,6,7,8,-1,10,11,12,13)

Stream.from(2).takeWhile{
  lst(_) != -1
}.foreach {i =>
  println(lst(i))
}

と、すると

2
3
4
5
6
7
8

となる。

さらに、

Stream from 2 takeWhile ( lst(_) != -1 ) foreach {i =>
  println(lst(i))
}

と、かなり自然にも書ける。

ちょっとパズル的ですが、

(1,1),(1,2),(1,3),(2,1),(2,2)...

は以下のようにすればいい。

val s0 = Stream.from(3)
val s1 = s0.map {_ / 3}
val s2 = s0.map {_ % 3 + 1}
val s = s1.zip(s2)