problems - Crockford
by Igor Cuckovic
JavaScript
var indentity = function(x) {
return x;
}
function sum(x, y) {
return x + y;
}
function add(x, y) {
return x + y;
}
function mul(x, y) {
return x * y;
}
var indentityf = function(x) {
return function() {
return x;
};
}
var idf = indentityf(3);
function addf(x){
return function(y) {
return x + y;
}
}
function applyf(f){
return function(x) {
return function(y) {
return f(x,y);
}
}
}
function curry(f, x) {
return function(y) {
return f(x, y);
};
};
// inc = addf(1); // +
// inc = applyf(sum)(1); // +
inc = curry(sum, 1); //+
// console.log(inc(5));
function methodise(f){
return function(x) {
return f(this, x)
}
}
Number.prototype.add = methodise(add);
//result = (3).add(4);
//console.log(result);
function demethodise(m) {
return function (x, y) {
return m.call(x, y);
};
}
//result = demethodise(Number.prototype.add)(5, 6);
function twice(f) {
return function(x) {
//var y = x;
return f(x, x);
};
};
var double = twice(sum);
//result = double(11);
var square = twice(mul);
//result = square(11);
function composeu(f1, f2) {
return function(x) {
return f2(f1(x));
};
};
//result = composeu(double, square)(3);
//console.log(result);
function composeb(f1, f2) {
return function(x, y, z) {
return f2(f1(x, y), z);
};
};
//result = composeb(add, mul)(2, 3, 5); // 25
function once(func) {
return function() {
var f = func;
func = null;
return f.apply(this, arguments);
};
}
add_once = once(add);
result = add_once(3, 4);
result2 = add_once(4, 4);
console.log(result);
console.log(result2);
var number = 10;
//counter = counterf(number);
//counter.inc()
//counter.dec()
function counterf(x) {
return {
inc: function() {
return x += 1;
},
dec: function() {
return x -= 1;
...