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
let dec = 0;
for(var i = 0; i < arr.length -1; i++){
if(arr[i+1] < arr[i]){
dec++;
if(dec > 1){break ;}
}
}
if(i === arr.length -1){
s();
}else{
f();
}
//v2 transformed to functional style: recursion, no assignments
const foo_intermediate = function(i, dec){
if(dec > 1){return f()}
if(i === arr.length){return s()}
if(arr[i+1]<[i]){return foo(i+1, dec+1)}
else{return foo(i+1, dec)}
};
foo_intermediate(0,0);
//v3 transformed to single expression : )
const foo = (i, dec) =>
(dec > 1) ? f() :
(i === arr.length) ? s() :
foo(i+1, (arr[i+1] < arr[i]) ? dec+1 : dec);
foo(0,0);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment