I’m trying to understand a new feature of Python 2.5 (PEP 309) called
“partial functions”. Here’s the Python example I pulled from Vincent
Foley’s blog:
import functional
def multiply(x, y):
return x * y
multiply_by_3 = functional.partial(multiply, 3)
multiply_by_3(4) #=> Will return 12
I understand what it’s doing, I just don’t understand what purpose of
partial functions would be. Can someone provide a use case for me?
Also, can/should we do this in Ruby?
Regards,
Dan
This communication is the property of Qwest and may contain confidential
or
privileged information. Unauthorized use of this communication is
strictly
prohibited and may be unlawful. If you have received this communication
in error, please immediately notify the sender by reply e-mail and
destroy
all copies of the communication and any attachments.
the partial function binds one of the arguments of that function, so
that
later on only the remaining arguments have to be specified. I think
it’s
also called currying.
I guess it could be done with a mix of wrapper functions and
metaprogramming.
On Thursday 18 May 2006 10:27 am, Berger, Daniel wrote:
partial functions would be. Can someone provide a use case for me?
Hey,
I believe this is just a use of currying, a way of reducing the number
of arguments to a function by ferreting some of them away (the boring
ones).
I’ll give you a simple example (from last week):
Warning, Scheme!
… bind zip here …
(binary-search index (lambda (s) (string-compare zip (car s))))
…
BINARY-SEARCH expects two arguments, an index and a function that takes one argument. Well, I’ve got to compare two arguments. Thankfully,
I’m always comparing against the same zip, so I may as well “curry” it
(and store it in the function), and create a new one-argument function
on the fly. I’ll pass that new function (from the LAMBDA) to
BINARY-SEARCH and it’ll never know the difference.
I’m trying to understand a new feature of Python 2.5 (PEP 309) called
“partial functions”. Here’s the Python example I pulled from Vincent
Foley’s blog:
[… curry example elided …]
I understand what it’s doing, I just don’t understand what purpose of
partial functions would be. Can someone provide a use case for me?
Suppose you have a collection of integers, say a = [1,2,3]. And you
wanted to create a new array consisting of all the integers in a, but
multiplied by 3. We have an array method (collect) that constructs a
new array by calling a function of one argument on each element of the
array. Now we just need to create a function of one argument to pass to
collect:
Convert a 2 arg operator (*)
into a 1 arg function (ie. a lambda).
multiply_by_3 = lambda { |n| n * 3 }
a = [1,2,3]
a_times_3 = a.collect(&multiply_by_3)
Also, can/should we do this in Ruby?
We do it all the time. We just don’t generally bother to give the newly
created function a name:
a_times_3 = a.collect { |n| n * 3 }
– Jim W.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.