誰だよこんなの思いついたやつ
scalaのStreamを使った無限フィボナッチ数列の作り方っ★
※StreamとはListを遅延評価にしたようなやつ。遅延評価なので実際にその値が必要になるまで評価されず、無限に要素を持つことが可能。
なんか普通に綺麗で、思いついたやつcrazyだと思う。
def fib(a:Int,b:Int):Stream[Int]=a#::fib(b,a+b)
これだけで無限フィボナッチ数列の完成。
a,bには最初の2つの数字をいれてあげる。#::はListの::と同じで、Streamを作成してくれる。例えば fib(1,10) と打ち込むと無限にフィボるので注意笑。fib(1,10).take(10) これで先頭が1,10から始まるフィボナッチ数列の先頭から10個目までを取得できる。ただ、この段階ではまだ評価されない。
Stream(1,?)
こんな感じで先頭の要素しか評価されとらん。
fib(1,10).take(10).foreach(println)
とかして初めて評価される
1
10
11
21
32
53
85
138
223
361
こんな感じですごい不思議なくらいすっきりしてる。
fib(1,10).take(5).filter(x=>x%2==0)
ぱないっす。