[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Accumulator
On Thu, May 23, 2002 at 11:09:30AM -0700, Paul Prescod wrote:
> Pixel wrote:
> > ...
> > well, you didn't talk about "reduce". The main pb with list
> > comprehensions is that they are limited to giving lists as a result.
>
> reduce is used roughly once in the 50,000 lines of code that are the
> Python standard library. It clearly is not pulling its weight. In a
> project I worked on with six different Python programmers, ranging in
> expertise from guru to newbie, nobody used it once.
>
> "reduce" may be the right thing for Lisp programmers but we have
> concrete proof that it is not the right thing for Python programmers.
That's a very weak argument.
I've seen sample code for writing web clients in Perl that is much
simpler to maintain and extend in a functional style. The example
takes a couple of classes from LWP (Perl's libwww) and the required
control structures to spider and perform link checking, and implements
something *more* functional and extensible in roughly half the code.
This is a Perl vs. Perl comparison that highlights object style
vs. functional style. What's interesting here is that the code
that *uses* these modules is a lot simpler, because the transformations
are described declaratively in setup code. A lot of the standard
options are simplified because they are implemented through the
layering of closures by the module user rather than done with lots
of option-checking by the module author.
I'm finding that Perl (to name one language) needs to go back to
McCarthy's well for some more inspiration. Thankfully, since
closures are first-class constructs in Perl, we're talking about
inspiration more than full-scale language reform. I'm surprised
I've never come across Lisp-style generators, iterators and filters
before. They go a long way towards generic programming without
the hideousness of C++ templates. :-)
Z.