Advertisement
Guest User

Untitled

a guest
Jan 17th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. /*
  2. Using generators here so your mileage may vary
  3. */
  4.  
  5. var makeIterable = function (iterator) {
  6. var iterable = {};
  7. iterable[Symbol.iterator] = iterator;
  8. return iterable;
  9. };
  10.  
  11. /*
  12. Function.method('curry', function ( ) {
  13. var slice = Array.prototype.slice,
  14. args = slice.apply(arguments),
  15. that = this;
  16. return function ( ) {
  17. return that.apply(null, args.concat(slice.apply(arguments)));
  18. };
  19. });
  20. */
  21. var curry = function () {
  22. // TODO
  23. };
  24.  
  25. var compose = function () {
  26. // TODO
  27. };
  28.  
  29. // transformers
  30. var map = function (mapping, iterable) {
  31. return makeIterable ( function* () {
  32. for(let x of iterable) {
  33. yield mapping(x);
  34. }
  35. });
  36. };
  37.  
  38. var filter = function (predicate, iterable) {
  39. return makeIterable ( function* () {
  40. for(let x of iterable) {
  41. if( predicate(x) ){
  42. yield x;
  43. }
  44. }
  45. });
  46. };
  47.  
  48. var scan = function (accumulate, initValue, iterable) {
  49. // TODO
  50. };
  51.  
  52. // terminators
  53. var collect = function (iterable) {
  54. var arr = [];
  55. for(let x of iterable) {
  56. arr.push(x);
  57. }
  58. return arr;
  59. }
  60.  
  61. var fold = function (accumulate, initValue, iterable) {
  62. // TODO
  63. };
  64.  
  65. var each = function (action, iterable) {
  66. // TODO
  67. };
  68.  
  69. //
  70. // tests
  71. //
  72.  
  73. var EXPECT_EQ = function (expected, actual) {
  74. // hacky way to compare stuff
  75. var e = JSON.stringify(expected);
  76. var a = JSON.stringify(actual);
  77. if (e !== a) {
  78. console.log('expected ' + e + ', got ' + a);
  79. }
  80. };
  81.  
  82. EXPECT_EQ( [2, 4, 6], collect(map( (x) => x*2, [1, 2, 3])) );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement