본문에서 사용할 함수
const reduce = (f, acc, iter) => {
if (!iter) {
iter = acc[Symbol.iterator]();
acc = iter.next().value;
}
for (const el of iter) {
acc = f(acc, el);
}
return acc;
};
go
- 매개변수와, 2개 이상의 함수들을 합성하여 그 함숫값을 반환하는 함수
const go = (arg, ...fs) => reduce((arg, f) => f(arg), arg, fs);
go(
1,
a => a + 10,
a => a + 100
console.log
)
pipe
- 2개이상의 함수들을 합성한 합성함수를 반환하는 함수
const pipe =
(f, ...fs) =>
(...args) =>
go(f(...args), ...fs);
const f = pipe(
(a, b) => a + b,
(a) => a + 10,
(a) => a + 100
);
console.log(f(0, 1));
curry
const curry =
(f) =>
(a, ..._) =>
_.length ? f(a, ..._) : (..._) => f(a, ..._);
const mult = curry((a, b) => a * b);
console.log(multi(3)(2));
console.log(multi(4)(5));
console.log(multi(1)(5));