function createCounter(start, step) {
return function(){
if (start === undefined)
start = 0;
if(step === undefined)
step = 1;
start+=step;
return start - step;
};
}
function pow(x) {
return x * x;
}
function func(f1, gen) {
return function() { //эта функция должна передать все аргументы в функцию gen;
// исходный код
};
}
var gen1 = createCounter(1,1);
function powGen = func(pow, createCounter);
console.log(powGen()); // 1
console.log(powGen()); // 4
console.log(powGen()); // 9
console.log(powGen()); // 16
function add(a, b) {
return a + b;
}
function square(x) { return x * x; }
var powAdd = func(pow, add);
console.log(powAdd(2, 3)); // 25 = (2 + 3) ^ 2
console.log(powAdd(5, 7)); // 144 = (5 + 7) ^ 2
function plus(x) {
return x + x;
}
function pow(x) {
return x * x;
}
function fun(a, gen) {
var arg1 = arguments;
return function() {
var arg = arguments;
var current1 = null;
for(var i = 0; i < arguments.length;i++)
current1 = gen(arguments[i]);
return a(current1);
};
}
var t = fun(plus, pow);
console.log(t(10)); //200
function createCounter(start, step) {
return function(){
if (start === undefined)
start = 0;
if(step === undefined)
step = 1;
start+=step;
return start - step;
};
}
function pow(x) {
return x * x;
}
function generator(f1, f2) {
return function() {
return f1(f2());
};
}
var generatedFunction = generator( pow, createCounter(1, 1) );
generatedFunction(); // 1
generatedFunction(); // 4
generatedFunction(); // 9
generatedFunction(); // 16
generatedFunction(); // 25
function createCounter(start, step) {
return function(){
if (start === undefined)
start = 0;
if(step === undefined)
step = 1;
start+=step;
return start - step;
};
}
function pow(x) {
return x * x;
}
function CustomIterator(f1, f2) {
this.f1 = f1;
this.f2 = f2;
this.next = function() {
return this.f1( this.f2() );
}
}
var iterator = new CustomIterator( pow, createCounter(1,1) )
iterator.next() // 1
iterator.next() // 4
// set some other function as f1
iterator.f1 = function(x) {
return x * x * x;
}
iterator.next() // 27
iterator.next() // 64
// resetting counter, creating it once again
iterator.f2 = createCounter(1, 5)
iterator.next() // 1
iterator.next() // 216
function createCounter(start, step) {
return function(){
if (start === undefined)
start = 0;
if(step === undefined)
step = 1;
start+=step;
return start - step;
};
}
function pow(x) {
return x * x;
}
function createIterator(f1, f2) {
function generated() {
return generated.f1( generated.f2() );
}
generated.f1 = f1;
generated.f2 = f2;
return generated;
}
iterator = createIterator( pow, createCounter(1,1) );
iterator(); // 1
iterator(); // 4
iterator.f1 = function(x) {
return x * x * x;
}
iterator(); // 27
iterator(); // 64
function createCounter(start, step) {
return function(){
if (start === undefined)
start = 0;
if(step === undefined)
step = 1;
start+=step;
return start - step;
};
}
function pow(x) {
return x * x;
}
function createIterator(f1, f2) {
function generated(inner_f1, inner_f2) {
if (arguments.length) {
if (typeof inner_f1 === 'function') {
generated.f1 = inner_f1;
}
if (typeof inner_f2 === 'function') {
generated.f2 = inner_f2;
}
} else {
return generated.f1( generated.f2() );
}
}
generated.f1 = f1;
generated.f2 = f2;
return generated;
}
iterator = createIterator( pow, createCounter(1,1) );
iterator(); // 1
iterator(); // 4
iterator(function(x) {
return x * x * x;
});
iterator(); // 27
iterator(); // 64