← Alle AufgabenJavaScript · Middle

curry: Currying

Schreib eine Funktion curry(fn), die eine Funktion mit mehreren Argumenten in eine Kette von Aufrufen verwandelt. Argumente können einzeln oder in Gruppen übergeben werden: add(1)(2)(3), add(1, 2)(3) und add(1, 2, 3) liefern alle dasselbe Ergebnis.

Sobald so viele Argumente gesammelt sind, wie fn deklariert (fn.length), wird fn selbst aufgerufen. Eine teilweise angewandte Funktion lässt sich viele Male aufrufen.

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