iterThunk
Create an iterator "thunk".
Usage
var iterThunk = require( '@stdlib/iter/pipeline-thunk' );
iterThunk( iterFcn[, ...args] )
Returns an iterator "thunk".
var array2iterator = require( '@stdlib/array/to-iterator' );
var iterSome = require( '@stdlib/iter/some' );
var thunk = iterThunk( iterSome, 3 );
var arr = array2iterator( [ 0, 0, 1, 1, 1 ] );
var bool = thunk( arr );
// returns true
arr = array2iterator( [ 0, 0, 1, 0, 1 ] );
bool = thunk( arr );
// returns false
A provided iterator function should have the following function signature:
function iterFcn( iterator[, ...args] ) {...}
where
The returned function expects a single argument
- iterator: an iterator
and invokes iterFcn
with the provided iterator and any previously provided args
.
Accordingly, this function implements left-to-right partial application with special consideration for functions which act upon iterator sequences.
Notes
- This function is useful within the context of iterator pipelines as a means to defer execution until a pipeline is ready for data flow.
- The function evaluation context is always
null
.
Examples
var randu = require( '@stdlib/random/iter/randu' );
var iterHead = require( '@stdlib/iter/head' );
var iterMap = require( '@stdlib/iter/map' );
var iterSome = require( '@stdlib/iter/some' );
var iterPipeline = require( '@stdlib/iter/pipeline' );
var iterThunk = require( '@stdlib/iter/pipeline-thunk' );
function threshold( r ) {
return ( r > 0.95 );
}
// Create a pipeline which tests whether at least 5% of values exceed a threshold:
var p = iterPipeline(
// Apply a threshold to iterated values:
iterThunk( iterMap, threshold ),
// Limit the sequence to 100 values:
iterThunk( iterHead, 100 ),
// Test whether at least 5 values exceed the threshold:
iterThunk( iterSome, 5 )
);
// Define the number of random number sequences to analyze:
var N = 100;
// Initialize a counter for sequences satisfying the 5% threshold:
var count = 0;
// Perform analysis...
var bool;
var i;
for ( i = 0; i < N; i++ ) {
bool = p( randu() );
if ( bool ) {
count += 1;
}
console.log( bool );
}
console.log( '%d of %d', count, N );