From 5a8a5cc4098aa9e9b817253023f6f9ddf9b43ac6 Mon Sep 17 00:00:00 2001 From: ermmmaks Date: Sun, 9 Nov 2025 14:07:24 +0300 Subject: [PATCH 1/6] Add curry-uncurry function and test for her --- src/curry_uncurry.py | 28 ++++++++++++++++++++++++++++ test/curry_test.py | 11 +++++++++++ 2 files changed, 39 insertions(+) create mode 100644 src/curry_uncurry.py create mode 100644 test/curry_test.py diff --git a/src/curry_uncurry.py b/src/curry_uncurry.py new file mode 100644 index 0000000..bc1118d --- /dev/null +++ b/src/curry_uncurry.py @@ -0,0 +1,28 @@ +def sum_args(*args): + return sum(args) + +def curry(func, arity): + if arity < 1: + 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 < 1: + raise ValueError("Арность должна быть положительной") + + def uncurried(*args): + result = curried_func + for arg in args: + result = curried_func(arg) + return result + + return uncurried diff --git a/test/curry_test.py b/test/curry_test.py new file mode 100644 index 0000000..59b5241 --- /dev/null +++ b/test/curry_test.py @@ -0,0 +1,11 @@ +from src.curry_uncurry import sum_args, curry, uncurry +import pytest + +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 From a363b08a0304a558f8c3ea20c2f11f2944e95fa9 Mon Sep 17 00:00:00 2001 From: ermmmaks Date: Sun, 9 Nov 2025 16:38:47 +0300 Subject: [PATCH 2/6] Add tests and fix the alg --- src/curry_uncurry.py | 3 ++- test/curring_test.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 test/curring_test.py diff --git a/src/curry_uncurry.py b/src/curry_uncurry.py index bc1118d..b8364c0 100644 --- a/src/curry_uncurry.py +++ b/src/curry_uncurry.py @@ -22,7 +22,8 @@ def uncurry(curried_func, arity): def uncurried(*args): result = curried_func for arg in args: - result = curried_func(arg) + 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..c3c2936 --- /dev/null +++ b/test/curring_test.py @@ -0,0 +1,12 @@ +from src.curry_uncurry import sum_args, curry, uncurry +import pytest + +def test_curry(): + sum3_curry = curry(sum_args, 3) + assert sum3_curry(1)(2)(3) == 6 + +def test_uncurry(): + sum3_curry = curry(sum_args, 3) + sum3_curry(1)(2)(3) + sum3_uncurry = uncurry(sum3_curry, 3) + assert sum3_uncurry(1, 2, 3) == 6 \ No newline at end of file From fe3a3453085ac39fa6ec6efc0b9340e716d55764 Mon Sep 17 00:00:00 2001 From: ermmmaks Date: Sun, 9 Nov 2025 18:25:01 +0300 Subject: [PATCH 3/6] Add test --- test/curring_test.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/test/curring_test.py b/test/curring_test.py index c3c2936..59b5241 100644 --- a/test/curring_test.py +++ b/test/curring_test.py @@ -6,7 +6,6 @@ def test_curry(): assert sum3_curry(1)(2)(3) == 6 def test_uncurry(): - sum3_curry = curry(sum_args, 3) - sum3_curry(1)(2)(3) - sum3_uncurry = uncurry(sum3_curry, 3) - assert sum3_uncurry(1, 2, 3) == 6 \ No newline at end of file + 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 From c6d1ed28c1393736a5305768e05ef09c28607cd5 Mon Sep 17 00:00:00 2001 From: ermmmaks Date: Mon, 17 Nov 2025 15:35:26 +0300 Subject: [PATCH 4/6] Delete double tests --- test/curry_test.py | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 test/curry_test.py diff --git a/test/curry_test.py b/test/curry_test.py deleted file mode 100644 index 59b5241..0000000 --- a/test/curry_test.py +++ /dev/null @@ -1,11 +0,0 @@ -from src.curry_uncurry import sum_args, curry, uncurry -import pytest - -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 From 5becdc296318ee2a3e966f4260615b2d4b4db6a6 Mon Sep 17 00:00:00 2001 From: ermmmaks Date: Mon, 17 Nov 2025 15:45:37 +0300 Subject: [PATCH 5/6] A little fix: null arity --- src/curry_uncurry.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/curry_uncurry.py b/src/curry_uncurry.py index b8364c0..56a3ffb 100644 --- a/src/curry_uncurry.py +++ b/src/curry_uncurry.py @@ -2,8 +2,8 @@ def sum_args(*args): return sum(args) def curry(func, arity): - if arity < 1: - raise ValueError("Арность должна быть положительной") + if arity < 0: + raise ValueError("Арность должна быть неотрицательной") def curried(*args): if len(args) >= arity: @@ -16,8 +16,8 @@ def next_curried(*next_args): return curried def uncurry(curried_func, arity): - if arity < 1: - raise ValueError("Арность должна быть положительной") + if arity < 0: + raise ValueError("Арность должна быть неотрицательной") def uncurried(*args): result = curried_func From f10bf2cd7ae5f4742c08c26aff495a4261560c34 Mon Sep 17 00:00:00 2001 From: ermmmaks Date: Mon, 17 Nov 2025 15:57:43 +0300 Subject: [PATCH 6/6] Delete import pytest --- test/curring_test.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/curring_test.py b/test/curring_test.py index 59b5241..8efa38f 100644 --- a/test/curring_test.py +++ b/test/curring_test.py @@ -1,5 +1,4 @@ from src.curry_uncurry import sum_args, curry, uncurry -import pytest def test_curry(): sum3_curry = curry(sum_args, 3)