Skip to content

Instantly share code, notes, and snippets.

@cem2ran
Last active April 16, 2017 12:46
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cem2ran/8f19ecae433ca2a6c508 to your computer and use it in GitHub Desktop.
Save cem2ran/8f19ecae433ca2a6c508 to your computer and use it in GitHub Desktop.
let map = (fn,[head, ...tail]) => head === undefined
? []
: [fn(head), ...map(fn,tail)]
console.log("map(x=>x+1,[1,2,3,4]) :",map(x=>x+1,[1,2,3,4]))
let filter = (predicate, [head, ...tail]) => head === undefined
? []
: predicate(head)
? [head, ...filter(predicate, tail)]
: filter(predicate, tail)
console.log("filter(x=>x>2,[1,2,3,4,5]) :", filter(x=>x>2,[1,2,3,4,5]))
let reduce = (fn, acc, [head, ...tail]) => head === undefined
? acc
: reduce(fn, fn(acc, head), tail);
console.log("reduce((x,y)=>x+y,0,[1,2,3,4]) :",reduce((x,y)=>x+y,0,[1,2,3,4]))
let map_derived = (f, list) => reduce((acc, next) => [...acc, f(next)], [], list);
console.log("map_derived(x=>x+1,[1,2,3,4]) :",map_derived(x=>x+1,[1,2,3,4]))
let filter_derived = (predicate, list) => reduce((acc, next) => predicate(next) ? [...acc, next] : acc, [], list);
console.log("filter_derived(x=>x>2,[1,2,3,4,5]) :", filter(x=>x>2,[1,2,3,4,5]))
@cem2ran
Copy link
Author

cem2ran commented Oct 5, 2015

https://babeljs.io/repl/#?babili=false&evaluate=true&lineWrap=false&presets=&targets=&browsers=&builtIns=false&code=let%20map%20%3D%20(fn%2C%5Bhead%2C%20...tail%5D)%20%3D%3E%20head%20%3D%3D%3D%20undefined%20%0A%09%3F%20%5B%5D%0A%09%3A%20%5Bfn(head)%2C%20...map(fn%2Ctail)%5D%0A%0Aconsole.log(%22map(x%3D%3Ex%2B1%2C%5B1%2C2%2C3%2C4%5D)%20%3A%22%2Cmap(x%3D%3Ex%2B1%2C%5B1%2C2%2C3%2C4%5D))%0A%0Alet%20filter%20%3D%20(predicate%2C%20%5Bhead%2C%20...tail%5D)%20%3D%3E%20head%20%3D%3D%3D%20undefined%20%0A%09%3F%20%5B%5D%0A%09%3A%20predicate(head)%0A%09%3F%20%5Bhead%2C%20...filter(predicate%2C%20tail)%5D%0A%09%3A%20filter(predicate%2C%20tail)%0A%0Aconsole.log(%22filter(x%3D%3Ex%3E2%2C%5B1%2C2%2C3%2C4%2C5%5D)%20%3A%22%2C%20filter(x%3D%3Ex%3E2%2C%5B1%2C2%2C3%2C4%2C5%5D))%0A%0Alet%20reduce%20%3D%20(fn%2C%20acc%2C%20%5Bhead%2C%20...tail%5D)%20%3D%3E%20head%20%3D%3D%3D%20undefined%20%0A%09%3F%20acc%20%0A%09%3A%20reduce(fn%2C%20fn(acc%2C%20head)%2C%20tail)%3B%0A%0Aconsole.log(%22reduce((x%2Cy)%3D%3Ex%2By%2C0%2C%5B1%2C2%2C3%2C4%5D)%20%3A%22%2Creduce((x%2Cy)%3D%3Ex%2By%2C0%2C%5B1%2C2%2C3%2C4%5D))%0A%0Alet%20map_derived%20%3D%20(f%2C%20list)%20%3D%3E%20reduce((acc%2C%20next)%20%3D%3E%20%5B...acc%2C%20f(next)%5D%2C%20%5B%5D%2C%20list)%3B%0A%0Aconsole.log(%22map_derived(x%3D%3Ex%2B1%2C%5B1%2C2%2C3%2C4%5D)%20%3A%22%2Cmap_derived(x%3D%3Ex%2B1%2C%5B1%2C2%2C3%2C4%5D))%0A%0Alet%20filter_derived%20%3D%20(predicate%2C%20list)%20%3D%3E%20reduce((acc%2C%20next)%20%3D%3E%20predicate(next)%20%3F%20%5B...acc%2C%20next%5D%20%3A%20acc%2C%20%5B%5D%2C%20list)%3B%0A%0Aconsole.log(%22filter_derived(x%3D%3Ex%3E2%2C%5B1%2C2%2C3%2C4%2C5%5D)%20%3A%22%2C%20filter(x%3D%3Ex%3E2%2C%5B1%2C2%2C3%2C4%2C5%5D))&experimental=true&loose=true&spec=false&playground=false

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment