Crockford FEM session
by James Greene
JavaScript
var identity = function(f) {
return f;
};
var add = function(a, b) {
return a + b;
};
var mul = function(a, b) {
return a * b;
};
var identityf = function(f) {
return function() {
return f;
};
};
var addf = function(a) {
return function(b) {
return a + b;
};
};
var applyf = function(f) {
return function(a) {
return function(b) {
return f(a, b);
};
};
};
var curry = function(f, a) {
return function(b) {
return f(a, b);
};
};
var curry2 = function(f, a) {
return applyf(f)(a);
};
var inc_impl1 = addf(1);
var inc_impl2 = applyf(add)(1);
var inc_impl3 = curry(add, 1);
var methodize1 = function(f) {
return function(b) {
return f(this, b);
};
};
var methodize2 = function(f) {
return function() {
var args = Array.prototype.slice.call(arguments, 0);
args.unshift(this);
return f.apply(this, args);
};
};
Number.prototype.add = methodize1(add);
Number.prototype.mul = methodize2(mul);
var demethodize = function(f) {
return function(a, b) {
return f.call(a, b);
};
};
var twice = function(f) {
return function(a) {
return f(a, a);
};
};
var double = twice(add);
var square = twice(mul);
var composeu = function(f, g) {
return function(a) {
return g(f(a));
};
};
console.log("identity(3) === " + identity(3));
console.log("add(3, 4) === " + add(3, 4));
console.log("mul(3, 4) === " + mul(3, 4));
console.log("identityf(3)() === " + identityf(3)());
console.log("addf(3)(4) === " + addf(3)(4));
console.log("applyf(add)(3)(4) === " + applyf(add)(3)(4));
console.log("applyf(mul)(5)(6) === " + applyf(mul)(5)(6));
console.log("curry(add, 3)(4) === " + curry(add, 3)(4));
console.log("curry(mul, 5)(6) === " + curry(mul, 5)(6));
console.log("curry2(add, 3)(4) === " + curry2(add, 3)(4));
console.log("curry2(mul, 5)(6) === " + curry2(mul, 5)(6));
console.log("inc_impl1(5) === " +...