-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
52 lines (45 loc) · 1.32 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// function * range(from, to) { while (from <= to) { yield from; from++; } return to; }
// function * map(xs, func) { for (let x of xs) { yield func(x); } }
// const reverseValues = (prev) => (x) => x === undefined ? prev : reverseValues((cb) => (cb(x), prev));
// const doReverse = (xs) => { let reverse = reverseValues(); for (let x of xs) { reverse = reverse(x); } return reverse(); };
// function * reverse(xs) { let next = doReverse(xs); let val; do { next = next(v => val = v); yield val; } while (next); }
// const foreach = (xs, func) => { for (let x of xs) { func(x); } };
function * range(from, to) {
while (from <= to) {
yield from;
from++;
}
return to;
}
function * map(xs, func) {
for (let x of xs) {
yield func(x);
}
}
const reverseValues = (prev) => (x) => x === undefined ? prev : reverseValues((cb) => (cb(x), prev));
const doReverse = (xs) => {
let reverse = reverseValues();
for (let x of xs) {
reverse = reverse(x);
}
return reverse();
};
function * reverse(xs) {
let next = doReverse(xs);
let val;
do {
next = next(v => val = v);
yield val;
} while (next);
}
const foreach = (xs, func) => {
for (let x of xs) {
func(x);
}
};
let numbers = range(1, 10);
numbers = map(numbers, function(n) {
return n * n
});
numbers = reverse(numbers);
foreach(numbers, console.log);