function reduce( $list, $fn, $memo )
{
let memo = $memo;
each( $list, ( $item ) => memo = $fn( memo, $item ));

return memo;
}

function each( $list, $fn ){
for( let item of $list ){
$fn( item );
}
}

function pipe()
{
let fns = arguments;
return ( arg ) => reduce( fns, ( arg, fn ) => fn( arg ), arg );
}

let f1 = pipe(
( a ) => a + 1,
( a ) => a + 2,
( a ) => a * a
);

console.log( f1( 1 ));
console.log( f1( 2 ));


+ Recent posts