← Усі задачіJavaScript · Middle

curry: каррування

Напишіть функцію curry(fn), яка перетворює функцію від кількох аргументів на ланцюжок викликів. Аргументи можна передавати по одному або групами: add(1)(2)(3), add(1, 2)(3) і add(1, 2, 3) дають те саме.

Коли аргументів набралося стільки, скільки оголошено в fn (fn.length), викликається сама fn. Частково застосовану функцію можна викликати багато разів.

Тести (4)

  1. const add = curry((a, b, c) => a + b + c);
    expect(add(1)(2)(3)).toBe(6);
  2. const add = curry((a, b, c) => a + b + c);
    expect(add(1, 2)(3)).toBe(6);
    expect(add(1)(2, 3)).toBe(6);
    expect(add(1, 2, 3)).toBe(6);
  3. const add = curry((a, b) => a + b);
    const add1 = add(1);
    expect(add1(10)).toBe(11);
    expect(add1(20)).toBe(21);
  4. const join = curry((a, b, c) => [a, b, c].join('-'));
    expect(join('x')('y')('z')).toBe('x-y-z');