Streams.js: deferred (lazy) calculations in Javascript
The javascript library stream.js introduces the “new” 1 structure of numerical data: stream. This is a container that looks like an array and an linked list, but contains an unlimited number of elements implemented by the deferred computing method .
For the argument,
The idea of an allegedly “infinite” range simplifies programming. For example, a list of even and odd numbers is thus displayed.
Creating your own streams with the given parameters is possible with
1 PS A similar concept of deferred computing, but with a different syntax, is implemented in linq.js and node-lazy , so it’s not quite correct for the author to call lists “the new data structure” for JavaScript.
CoffeeScript streams.js library: coffeestream .
var s = Stream.range( 10, 20 );
s.print(); // prints the numbers from 10 to 20For the argument,
Stream.range( low, high )you can specify only the initial boundary of the range Stream.range( low ), then the stream will consist of an unlimited number of natural numbers. The default Stream.range()starts with 1. The idea of an allegedly “infinite” range simplifies programming. For example, a list of even and odd numbers is thus displayed.
var naturalNumbers = Stream.range(); // naturalNumbers is now 1, 2, 3, ...
var evenNumbers = naturalNumbers.map( function ( x ) {
return 2 * x;
} ); // evenNumbers is now 2, 4, 6, ...
var oddNumbers = naturalNumbers.filter( function ( x ) {
return x % 2 != 0;
} ); // oddNumbers is now 1, 3, 5, ...
evenNumbers.take( 3 ).print(); // prints 2, 4, 6
oddNumbers.take( 3 ).print(); // prints 1, 3, 5Creating your own streams with the given parameters is possible with
new Stream( head, functionReturningTail ). For example, here is a concise way to list natural numbers.function ones() {
return new Stream( 1, ones );
}
function naturalNumbers() {
return new Stream(
// the natural numbers are the stream whose first element is 1...
1,
function () {
// and the rest are the natural numbers all incremented by one
// which is obtained by adding the stream of natural numbers...
// 1, 2, 3, 4, 5, ...
// to the infinite stream of ones...
// 1, 1, 1, 1, 1, ...
// yielding...
// 2, 3, 4, 5, 6, ...
// which indeed are the REST of the natural numbers after one
return ones().add( naturalNumbers() );
}
);
}
naturalNumbers().take( 5 ).print(); // prints 1, 2, 3, 4, 51 PS A similar concept of deferred computing, but with a different syntax, is implemented in linq.js and node-lazy , so it’s not quite correct for the author to call lists “the new data structure” for JavaScript.
CoffeeScript streams.js library: coffeestream .