Fun with Functions

by Brenton Strine

HTML

<div id="writeln"></div>

JavaScript

console.clear();

function log(arg) {
  if(arg===null){arg="<code>null</code>";}
  if(Array.isArray(arg)){arg="<code>[]</code>"}
    document.getElementById("writeln").innerHTML += arg + "<br>";
}
function identity(x) {
    return x;
}

// 1
log("FIRST")
log(identity(3));

// 2
log("SECOND")
function funky(o) {
    o = null;
}
var x = [];
funky(x);
log(x);

// 3
log("THIRD")
function swap(a, b) {
    var temp = a;
    a = b;
    b = temp;
}
var x = 1; 
var y = 2;
swap(x, y);
log(x);

// 4
log("FOURTH")
function add(first, second) {
    return first + second;
}
function sub(first, second) {
    return first - second;
}
function mul(first, second) {
    return first * second;
}
log(add(3, 4))    //  7
log(sub(3, 4))    // -1
log(mul(3, 4))    // 12


// 5
log("FIFTH");
function identityf(arg1){
	return function(){
  	return arg1;
  }
}
var three = identityf(3);
log(three())    // 3

// 6
log("SIXTH");
function addf(arg1){
	return function(arg2){
  	return arg1 + arg2;
  }
}
log(addf(3)(4)) //7

// 7
log("SEVENTH");
function curry(binary, first){
	return function(second){
  	return binary(first, second);
  }
}
var add3 = curry(add, 3);
log(add3(4))              // 7
log(curry(mul, 5)(6))     // 30

// 8
log("EIGHTH");
function curryr(binary, second) {
	return function(first){
  	return binary(first, second);
  }
}

var sub3 = curryr(sub, 3);
log(sub3(11))     // 8
log(sub3(3))      // 0

// 9
log("NINTH");
function liftf(binary){
	return function(first){
  	return function(second){
    	return binary(first, second);
    }
  }
}
var addf = liftf(add);
log(addf(3)(4))           // 7
log(liftf(mul)(5)(6))     // 30

// 10
log("TENTH");
log("--- .1")
var inc = curry(add, 1) ;
log(inc(5))              // 6
log(inc(inc(5)))         // 7
log("--- .2")
var inc = curryr(add, 1) ;
log(inc(5))              // 6
log(inc(inc(5)))         // 7
log("--- .3")
var inc = liftf(add)(1) ;
log(inc(5))              // 6
log(inc(inc(5)))         // 7
log("--- .4");
var inc = addf(1)...