Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var fusion = (function () {
- var min = Math.min;
- Iterator.prototype = {
- map: function (f) {
- return new MapIterator([f, this.at], this.length);
- },
- take: take,
- toArray: toArray
- };
- MapIterator.prototype = {
- map: function (f) {
- return new MapIterator([f].concat(this.fs), this.length);
- },
- take: take,
- toArray: toArray
- };
- return iterator;
- function compose(f, g) {
- return function (x) {
- return f(g(x));
- };
- }
- function iterator(a) {
- return new Iterator(function (index) {
- return a[index];
- }, a.length);
- }
- function Iterator(at, length) {
- this.at = at;
- this.length = length;
- }
- function MapIterator(fs, length) {
- this.fs = fs;
- this.at = fs.reduce(compose);
- this.length = length;
- }
- function take(n) {
- return new Iterator(this.at, min(n, this.length));
- }
- function toArray() {
- var at = this.at;
- var length = this.length;
- var array = new Array(length);
- var index = 0;
- while (index < length) array[index] = at(index++);
- return array;
- }
- }());
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement