[BangPypers] if not with comparision statement in python
Dhananjay Nene
dhananjay.nene at gmail.com
Mon Aug 1 14:23:31 CEST 2011
On Mon, Aug 1, 2011 at 4:41 PM, Baishampayan Ghose <b.ghose at gmail.com> wrote:
> On Mon, Aug 1, 2011 at 4:38 PM, Dhananjay Nene <dhananjay.nene at gmail.com> wrote:
>> I also find map much more atomic and portable construct to think in -
>> after all every list comprehension is syntactic sugar around map +
>> filter, and map/reduce/filter are far more omnipresent than list
>> comprehensions.
>
> The above will especially make sense to someone who programs in
> multiple programming languages in his day job.
>
> Regards,
> BG
>
Actually there was one more aspect I didn't touch upon - why atomic
functions are helpful. So its easier to construct bigger building
smaller building blocks. And one doesn't need to work in different
languages - its doable in python as well.
Functions compose.
I stole a python compose function from
http://en.wikipedia.org/wiki/Function_composition_%28computer_science%29#First-class_composition
(though I reversed the order of functions to help it make a little
easier on the eyes)
If we take the earlier functions double, increment and then want to
also sum up the results, here's how it looks in python using function
compositon
(note the [::-1] - thats the only change I made)
from functools import partial
def compose(*funcs, **kfuncs):
return reduce(lambda f, g: lambda *args, **kaargs: f(g(*args,
**kaargs)), funcs[::-1])
def double(x) : return x * 2
def increment(x) : return x + 1
print compose(partial(map,double), partial(map,increment),
partial(reduce,lambda x,y : x + y))(range(5))
Notice the sequential application of the double, increment and then a
sum operator
The same again in scala (since it is easier in syntax - it will help
relate what the function above is doing
println(0 to 4 map {_ * 2} map {_ + 1} reduce {_ + _})
(the _ refer to the arguments passed to the function - point free programming).
Dhananjay
More information about the BangPypers
mailing list