# function operators

James A. H. Skillen jahs at jahs.org
Tue Nov 27 02:43:34 CET 2001

```Has anyone ever wished that Python had operators defined on functions?
For example, suppose you want the function f(x) = cos(x) + sin(x).
You could do:

def f(x):
return cos(x) + sin(x)

or

f = lambda x: cos(x) + sin(x)

but wouldn't:

f = cos + sin

be *much* nicer?

Similarly for *, -, /, etc.

Taking the idea of PEP 211 further, we could have the "outer product"
operator "@" work on functions too.

So

f = cos @ sin

would be equivalent to

f = lambda x,y: (cos(x), sin(y))

There is also another tremendously useful operator on functions:
composition.

For want of a better symbol, how about a new keyword "on" to be
composition.
So to get the function f(x) = cos(sin(x)) I could do

f = cos on sin

Why? Well this is useful if you use map, filter etc.

If I wanted to apply f as above to {0, ..., 9} then at the moment I
could do

map(cos, map(sin, range(10)))

or

map(lambda x: cos(sin(x)), range(10))

but with the new syntax I could write

map(cos on sin, range(10))

which is much clearer.

These are just trivial examples, but in conjunction with the car and cdr
functions it becomes powerful. For example, cadr = car on cdr.

Does this make sense, or have I been doing too much mathematics? ;-)

--
James A. H. Skillen - jahs at jahs.org