Python syntax in Lisp and Scheme

Hans Nowak hans at zephyrfalcon.org
Sat Oct 4 21:20:40 EDT 2003


Lulu of the Lotus-Eaters wrote:
> grzegorz at pithekos.net (Grzegorz Chrupala) wrote previously:
> |shocked at how awkward Paul Graham's "accumulator generator" snippet is
> |in Python:
> |class foo:
> |   def __init__(self, n):
> |       self.n = n
> |   def __call__(self, i):
> |       self.n += i
> |       return self.n
> 
> Me too.  The way I'd do it is probably a lot closer to the way Schemers
> would do it:
> 
>     >>> def foo(i, accum=[0]):
>     ...     accum[0]+=i
>     ...     return accum[0]
>     ...
>     >>> foo(1)
>     1
>     >>> foo(3)
>     4
> 
> Shorter, and without an awkward class.

Yah, but instead it abuses a relatively obscure Python feature... the fact that 
default arguments are created when the function is created (rather than when it 
is called).  I'd rather have the class, which is, IMHO, a better way to 
preserve state than closures.  (Explicit being better than implicit and all 
that... :-)

-- 
Hans (hans at zephyrfalcon.org)
http://zephyrfalcon.org/







More information about the Python-list mailing list