← Wszystkie zadaniaJavaScript · Middle

curry: currying

Napisz funkcję curry(fn), która zamienia funkcję wielu argumentów w łańcuch wywołań. Argumenty można przekazywać pojedynczo lub grupami: add(1)(2)(3), add(1, 2)(3) i add(1, 2, 3) dają ten sam wynik.

Gdy zbierze się tyle argumentów, ile deklaruje fn (fn.length), wywoływana jest sama fn. Częściowo zastosowaną funkcję można wywoływać wiele razy.

Testy (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');