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
4th year MMath Mathematics undergraduate,
University of Warwick, UK.



More information about the Python-list mailing list