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