Statistical Programming

誰だよこんなの思いついたやつ

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)

ぱないっす。