diff --git a/src/curry_uncurry.py b/src/curry_uncurry.py new file mode 100644 index 0000000..56a3ffb --- /dev/null +++ b/src/curry_uncurry.py @@ -0,0 +1,29 @@ +def sum_args(*args): + return sum(args) + +def curry(func, arity): + if arity < 0: + raise ValueError("Арность должна быть неотрицательной") + + def curried(*args): + if len(args) >= arity: + return func(*args[:arity]) + + def next_curried(*next_args): + return curried(*args, *next_args) + return next_curried + + return curried + +def uncurry(curried_func, arity): + if arity < 0: + raise ValueError("Арность должна быть неотрицательной") + + def uncurried(*args): + result = curried_func + for arg in args: + result = result(arg) + return result + + return uncurried + diff --git a/test/curring_test.py b/test/curring_test.py new file mode 100644 index 0000000..8efa38f --- /dev/null +++ b/test/curring_test.py @@ -0,0 +1,10 @@ +from src.curry_uncurry import sum_args, curry, uncurry + +def test_curry(): + sum3_curry = curry(sum_args, 3) + assert sum3_curry(1)(2)(3) == 6 + +def test_uncurry(): + sum4_curry = curry(sum_args, 4) + sum4_uncurry = uncurry(sum4_curry, 4) + assert sum4_uncurry(1, 2, 3, 4) == 10 \ No newline at end of file