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;
   ...