Skip to content

Instantly share code, notes, and snippets.

@abresas
Created August 18, 2018 18:14
Show Gist options
  • Save abresas/e981020739acb12694c6ac8dc7f4d95b to your computer and use it in GitHub Desktop.
Save abresas/e981020739acb12694c6ac8dc7f4d95b to your computer and use it in GitHub Desktop.
var range = function (a, b) { return function*() { for (var i = a; i <= b; ++i) { yield i; } } };
var map = function (m, f) { return function*() { for (let i of m()) { yield f(i); } } };
var foreach = function (m, f) { for (let i of m()) { f(i); } };
var head = function (m) { for (let i of m()) { return i; } };
var tail = function (m) { return function*() { var first = true; for (let i of m()) { if (!first) { yield i; } first = false; } }; };
var isEmpty = function(m) { var r = true; for (let i of m()) { r = false; } return r; }
var reverse = function(m) { return function*() { if (!isEmpty(m)) { for (let i of reverse(tail(m))()) { yield i; } yield head(m); } } };
foreach(reverse(map(range(1,10), function(i) { return i*i; })), console.log);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment