Skip to content

Instantly share code, notes, and snippets.

@mgechev
Created February 24, 2015 07:43
Show Gist options
  • Save mgechev/83d6b83489660e07baca to your computer and use it in GitHub Desktop.
Save mgechev/83d6b83489660e07baca to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<script id="jsbin-javascript">
var arr = [1, 2, 3, 4];
/*
function map(arr, f) {
return arr.reduce(function (o, c) {
o.push(f(c));
return o;
}, []);
}
console.log(map([1, 2, 3, 4], function (a) {
return a + 1;
}));
*/
/*
function mapper(f) {
return function (p, c) {
p.push(f(c));
return p;
};
}
arr.reduce(mapper(function (c) { return c + 1; }), []);
*/
function append(c, e) {
return c.push(e);
}
function mapper(f) {
return function (append) {
return function (p, c) {
append(p, f(c));
return p;
};
};
}
//console.log(arr.reduce(mapper(function (c) { return c + 1; })(append), []));
/*
console.log(arr.reduce(
mapper
(function (c) { return c + 1; })
(mapper(function (c) {
return c * 2;
})(append)), []
));
*/
function combine() {
var fncs = [].slice.call(arguments);
return function (f) {
var result = f;
for (var i = fncs.length - 1; i >= 0; i -= 1) {
result = fncs[i](result);
}
return result;
};
}
/*
console.log(
arr.reduce(
combine(
mapper(function (x) { return x + 1; }),
mapper(function (x) { return x * 2; })
)(append), []
));
*/
function transducers(xform, col, f, start) {
return col.reduce(xform(f), start);
}
console.log(
transducers(
combine(
mapper(function (x) { return x + 1; }),
mapper(function (x) { return x * 2; })
),
arr,
append,
[]
));
</script>
<script id="jsbin-source-javascript" type="text/javascript">var arr = [1, 2, 3, 4];
/*
function map(arr, f) {
return arr.reduce(function (o, c) {
o.push(f(c));
return o;
}, []);
}
console.log(map([1, 2, 3, 4], function (a) {
return a + 1;
}));
*/
/*
function mapper(f) {
return function (p, c) {
p.push(f(c));
return p;
};
}
arr.reduce(mapper(function (c) { return c + 1; }), []);
*/
function append(c, e) {
return c.push(e);
}
function mapper(f) {
return function (append) {
return function (p, c) {
append(p, f(c));
return p;
};
};
}
//console.log(arr.reduce(mapper(function (c) { return c + 1; })(append), []));
/*
console.log(arr.reduce(
mapper
(function (c) { return c + 1; })
(mapper(function (c) {
return c * 2;
})(append)), []
));
*/
function combine() {
var fncs = [].slice.call(arguments);
return function (f) {
var result = f;
for (var i = fncs.length - 1; i >= 0; i -= 1) {
result = fncs[i](result);
}
return result;
};
}
/*
console.log(
arr.reduce(
combine(
mapper(function (x) { return x + 1; }),
mapper(function (x) { return x * 2; })
)(append), []
));
*/
function transducers(xform, col, f, start) {
return col.reduce(xform(f), start);
}
console.log(
transducers(
combine(
mapper(function (x) { return x + 1; }),
mapper(function (x) { return x * 2; })
),
arr,
append,
[]
));</script></body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment