unfold
object Collection {
def unfold[A, S](s: S)(f: (S) => Option[(A, S)]): Collection[A]
}
unfold は、関数 f が Some に包んだ値を返し続ける限り、その値のペアを使ってコレクションを作成します。
f は現在の状態を受け取り、次の要素と次の状態のペアを計算して返します。
f が None をした時点でコレクションの構築は止まります。
関数 f が始めて適用されるとき、初期状態 s が入力されます。