# Re: Partial functions?

partial functions would be. Can someone provide a use case for me?

# Convert a 2 arg operator (*)

created function a name:

a_times_3 = a.collect { |n| n * 3 }

– Jim W.

Ah, ok. Is there any kind of speed advantage to this approach? Or is
it more of a design/DRY technique?

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
destroy
all copies of the communication and any attachments.

On 5/18/06, Berger, Daniel [email protected] wrote:

I’m trying to understand a new feature of Python 2.5 (PEP

1. called

“partial functions”. Here’s the Python example I pulled
from Vincent
Foley’s blog:

[… curry example elided …]

I think partial functions is unapropriate name. The first thing I
thought of when I read the subject of this email was the mathematical
concept of it[0].

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 }

Ah, ok. Is there any kind of speed advantage to this approach? Or is
it more of a design/DRY technique?

I think giving it a name allows you to reuse it multiple times without
rewriting it. Everytime you introduce a new name function you have a
new abstraction. You could later redefine it (e.g. for speed/space
optimization) and that change would propagate to all its uses.

Having high order functions is a nice thing to have because you can
use them to build complex functions out of simpler ones. I asked a
similar question sometime ago[1].

Cheers,
Ed

On 5/18/06, Berger, Daniel [email protected] wrote:

Ah, ok. Is there any kind of speed advantage to this approach? Or is
it more of a design/DRY technique?

In functional languages, the compiler can reduce all the computation
involving the curried args, storing the computation.
This can make things faster.

f x y = (do_something_expensive_with x) + y
f_15 = f 15 # takes a while because reduces
# (do_something_expensive_with 15) to a value
(1…10000).map(f_15) # executes very fast

In ruby, it makes things slower
(Two calls instead of one, no caching of results.)

On 5/18/06, Edgardo H. [email protected] wrote:

I think partial functions is unapropriate name. The first thing I
thought of when I read the subject of this email was the mathematical
concept of it[0].

Exactly. Partial functions are another term for what some references
call ‘recursively enumerable’ functions, meaning a function that can
be computed by some Turing machine. I believe the appropriate term is
‘Curried functions’, from the logician who first proposed them,