Skip to content

Instantly share code, notes, and snippets.

@wmjd
Last active April 18, 2019 22:32
Show Gist options
  • Select an option

  • Save wmjd/da6eeb32c99ddcff74541c185d9f6134 to your computer and use it in GitHub Desktop.

Select an option

Save wmjd/da6eeb32c99ddcff74541c185d9f6134 to your computer and use it in GitHub Desktop.
//some shared stuff first:
var arr = [0,1,2,3,5,4,5,7];
const s = () => console.log("success");
const f = () => console.log("failure");
//v1 imperative style
function exeImperative(){
let dec = 0;
for(var i = 0; i < arr.length -1; i++){
if(arr[i+1] < arr[i]){
if(++dec > 1){break ;}
}
}
if(i === arr.length -1){
s();
}else{
f();
}
}
exeImperative();
//v2 transformed to functional style: recursion, no (re)assignments
const foo = function(i, dec){
if(dec > 1){return "fail"}
if(i === arr.length){return "succeed"}
if(arr[i+1]<arr[i]){return foo(i+1, dec+1)}
else{return foo(i+1, dec)}
};
console.log(foo(0,0));
//v3 transformed to single statement : )
const bar = (i, dec) =>
(dec > 1) ? "fail" :
(i === arr.length) ? "succeed" :
bar(i+1, (arr[i+1] < arr[i]) ? dec+1 : dec);
console.log(bar(0,0));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment