Func<IObservable<BigInteger>, Func<IObservable<BigInteger>,…

Twetch ·

Func<IObservable<BigInteger>, Func<IObservable<BigInteger>, IObservable<BigInteger>>, IObservable<BigInteger>> consMap =
(startWith, function) => Observable.Create<BigInteger>(observer =>
{
var subject = new Subject<BigInteger>();
var loopFunc = function(subject.ObserveOn(NewThreadScheduler.Default));
var loopSub = loopFunc.Subscribe(i => subject.OnNext(i));
var outerSub = subject.Subscribe(i => observer.OnNext(i));
startWith.Subscribe(subject.OnNext);
return new CompositeDisposable(2) { loopSub, outerSub };
});

Func<BigInteger, BigInteger, BigInteger> fiboOperation = (x, y) => x + y;
var fibonacciSequence = consMap(new BigInteger[] { 0, 1 }.ToObservable(), xs => xs.Zip(xs.Skip(1), fiboOperation));
fibonacciSequence.Take(500000).DumpLatest();