We can make simple partials using the Python lambda. Here's a Python version of the add function we looked at in Haskell:
def add(x, y):
return x + y
Python doesn't support currying as part of the language, so we can't just do:
add(1)
If we try, an exception is raised:
>>> inc = add(1)Traceback (most recent call last):File "", line 1, in TypeError: function takes 2 positional arguments but 1 were given
What we can do is use a lambda as described in this guide:
>>> inc = lambda x: add(1, x)>>> inc(2)3
We can go a bit further with this approach and define a function that does this for us, taking the first argument on which to partially apply add:
def make_adder(x):
return lambda y: add(x, y)
Now we can use make_adder to, in essence, partially apply add to an argument:
>>> inc = make_adder(1)>>> inc(2)3
Since make_adder is general, we can use it to create any "add a constant" functions. E.g.
>>> add10 = make_adder(10)>>> add10(5)15
This approach can be useful, but requires a specialized partial application function for each case. Python provides the capability to come up with a more general solution.
Page last edited March 08, 2024
Text editor powered by tinymce.