Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

fmap(), "inverse" of Python map() function

131 views
Skip to first unread message

vasudevram

unread,
Oct 5, 2012, 4:19:17 PM10/5/12
to

Ian Kelly

unread,
Oct 5, 2012, 5:31:35 PM10/5/12
to Python
On Fri, Oct 5, 2012 at 2:19 PM, vasudevram <vasud...@gmail.com> wrote:
>
> http://jugad2.blogspot.in/2012/10/fmap-inverse-of-python-map-function.html

Your fmap is a special case of reduce.

def fmap(functions, argument):
return reduce(lambda result, func: func(result), functions, argument)

Ian Kelly

unread,
Oct 5, 2012, 5:43:31 PM10/5/12
to Python
In a more functional style, you could also use reduce to compose the
functions before applying them:

def compose(f, g):
return lambda x: f(g(x))

def fmap(functions):
return reduce(compose, reversed(functions))

# Allowing you to then do:
result = fmap(functions)(argument)

Cheers,
Ian

Devin Jeanpierre

unread,
Oct 5, 2012, 6:52:41 PM10/5/12
to Ian Kelly, Python
On Fri, Oct 5, 2012 at 5:31 PM, Ian Kelly <ian.g...@gmail.com> wrote:
> On Fri, Oct 5, 2012 at 2:19 PM, vasudevram <vasud...@gmail.com> wrote:
>>
>> http://jugad2.blogspot.in/2012/10/fmap-inverse-of-python-map-function.html
>
> Your fmap is a special case of reduce.

So is map.

def map(f, seq):
return reduce(
lambda rseq, newpre:
rseq.append(f(newpre)) or rseq,
seq,
[])

"X is a special case of reduce" is basically the same as saying "X can
be implemented using a for loop". If it's meant as a complaint, it's a
poor one.

-- Devin

Ian Kelly

unread,
Oct 5, 2012, 7:24:14 PM10/5/12
to Python
On Fri, Oct 5, 2012 at 4:52 PM, Devin Jeanpierre <jeanpi...@gmail.com> wrote:
> On Fri, Oct 5, 2012 at 5:31 PM, Ian Kelly <ian.g...@gmail.com> wrote:
>> On Fri, Oct 5, 2012 at 2:19 PM, vasudevram <vasud...@gmail.com> wrote:
>>>
>>> http://jugad2.blogspot.in/2012/10/fmap-inverse-of-python-map-function.html
>>
>> Your fmap is a special case of reduce.
>
> So is map.

I realize that. My point is that the function *feels* more like a
variant of reduce than of map.

> If it's meant as a complaint, it's a poor one.

It's not.

Devin Jeanpierre

unread,
Oct 5, 2012, 7:30:57 PM10/5/12
to Ian Kelly, Python
On Fri, Oct 5, 2012 at 7:24 PM, Ian Kelly <ian.g...@gmail.com> wrote:
> I realize that. My point is that the function *feels* more like a
> variant of reduce than of map.
>
>> If it's meant as a complaint, it's a poor one.
>
> It's not.

Fair enough all around. Sorry for misunderstanding.

-- Devin

vasudevram

unread,
Oct 6, 2012, 2:57:58 PM10/6/12
to Python
On Saturday, October 6, 2012 5:01:40 AM UTC+5:30, Devin Jeanpierre wrote:
> On Fri, Oct 5, 2012 at 7:24 PM, Ian Kelly wrote:
>
> > I realize that. My point is that the function *feels* more like a
>
> > variant of reduce than of map.
>
> >
>
> >> If it's meant as a complaint, it's a poor one.
>
> >
>
> > It's not.
>
>
>
> Fair enough all around. Sorry for misunderstanding.
>
>
>
> -- Devin

Thanks to all who replied. Always good to learn something new.

- Vasudev

vasudevram

unread,
Oct 6, 2012, 2:57:58 PM10/6/12
to comp.lan...@googlegroups.com, Python
On Saturday, October 6, 2012 5:01:40 AM UTC+5:30, Devin Jeanpierre wrote:
> On Fri, Oct 5, 2012 at 7:24 PM, Ian Kelly wrote:
>
> > I realize that. My point is that the function *feels* more like a
>
> > variant of reduce than of map.
>
> >
>
> >> If it's meant as a complaint, it's a poor one.
>
> >
>
> > It's not.
>
>
>
> Fair enough all around. Sorry for misunderstanding.
>
>
>
> -- Devin

vasudevram

unread,
Oct 6, 2012, 6:07:00 PM10/6/12
to Python

> Thanks to all who replied. Always good to learn something new.

P.S. A reader posted a good comment with Scala as well as Python code for a compose function (basically same functionality as fmap, or more - the compose once, run many times thing). It's the 4th comment on my blog post.

- Vasudev

vasudevram

unread,
Oct 6, 2012, 6:07:00 PM10/6/12
to comp.lan...@googlegroups.com, Python

> Thanks to all who replied. Always good to learn something new.

0 new messages