함수형프로그래밍 go, pipe, curry

Dorr·2021년 8월 15일
0

본문에서 사용할 함수

// reduce 함수
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
)
// 111

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)); // 111

curry

const curry =
  (f) =>
  (a, ..._) =>
    _.length ? f(a, ..._) : (..._) => f(a, ..._);

const mult = curry((a, b) => a * b);

console.log(multi(3)(2)); // 6
console.log(multi(4)(5)); // 20
console.log(multi(1)(5)); // 5

0개의 댓글