Skip to content

Commit 13dbaaf

Browse files
committed
Improve and reorder curry examples
1 parent 8652d8a commit 13dbaaf

File tree

6 files changed

+74
-65
lines changed

6 files changed

+74
-65
lines changed

JavaScript/5-bad.js

Lines changed: 0 additions & 21 deletions
This file was deleted.

JavaScript/6-curry-bad.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
'use strict';
2+
3+
const curry = fn => (...args) => (
4+
fn.length > args.length ? curry(
5+
((fn, ...args1) => (...args2) => (
6+
fn(...args1.concat(args2))
7+
))(fn, ...args)
8+
) : fn(...args)
9+
);
10+
11+
// Usage
12+
13+
const sum4 = (a, b, c, d) => (a + b + c + d);
14+
15+
const f = curry(sum4);
16+
const y1 = sum4(1, 2, 3, 4);
17+
const y2 = f(1, 2, 3, 4);
18+
const y3 = f(1, 2, 3)(4);
19+
const y4 = f(1, 2)(3)(4);
20+
const y5 = f(1)(2)(3)(4);
21+
const y6 = f(1)(2, 3, 4);
22+
const y7 = f(1)(2)(3, 4);
23+
const y8 = f(1, 2)(3, 4);
24+
console.log(y1, y2, y3, y4, y5, y6, y7, y8);

JavaScript/6-curry.js

Lines changed: 0 additions & 22 deletions
This file was deleted.

JavaScript/7-curry.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
'use strict';
2+
3+
const curry = fn => (...args) => {
4+
if (fn.length > args.length) {
5+
const f = fn.bind(null, ...args);
6+
return curry(f);
7+
} else {
8+
return fn(...args);
9+
}
10+
};
11+
12+
// Usage
13+
14+
const sum4 = (a, b, c, d) => (a + b + c + d);
15+
16+
const f = curry(sum4);
17+
const y1 = sum4(1, 2, 3, 4);
18+
const y2 = f(1, 2, 3, 4);
19+
const y3 = f(1, 2, 3)(4);
20+
const y4 = f(1, 2)(3)(4);
21+
const y5 = f(1)(2)(3)(4);
22+
const y6 = f(1)(2, 3, 4);
23+
const y7 = f(1)(2)(3, 4);
24+
const y8 = f(1, 2)(3, 4);
25+
console.log(y1, y2, y3, y4, y5, y6, y7, y8);

JavaScript/7-extended.js

Lines changed: 0 additions & 22 deletions
This file was deleted.

JavaScript/8-curry-ext.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
'use strict';
2+
3+
const curry = (fn, ...par) => {
4+
const curried = (...args) => (
5+
fn.length > args.length ?
6+
curry(fn.bind(null, ...args)) :
7+
fn(...args)
8+
);
9+
return par.length ? curried(...par) : curried;
10+
};
11+
12+
// Usage
13+
14+
const sum4 = (a, b, c, d) => (a + b + c + d);
15+
16+
const f = curry(sum4);
17+
const y1 = sum4(1, 2, 3, 4);
18+
const y2 = f(1, 2, 3, 4);
19+
const y3 = f(1, 2, 3)(4);
20+
const y4 = f(1, 2)(3)(4);
21+
const y5 = f(1)(2)(3)(4);
22+
const y6 = f(1)(2, 3, 4);
23+
const y7 = f(1)(2)(3, 4);
24+
const y8 = f(1, 2)(3, 4);
25+
console.log(y1, y2, y3, y4, y5, y6, y7, y8);

0 commit comments

Comments
 (0)