Python syntax in Lisp and Scheme

Björn Lindberg d95-bli at nada.kth.se
Wed Oct 15 07:37:08 EDT 2003


mertz at gnosis.cx (David Mertz) writes:

> |> Isn't it true though that the lambda can only contain a single
> |> expression and no statements?  That seems to limit closures somewhat.
> 
> David Eppstein <eppstein at ics.uci.edu> wrote previously:
> |It limits lambdas.  It doesn't limit named functions.  Unlike lisp, a
> |Python function definition can be nested within a function call, and the
> |inner function can access variables in the outer function's closure.
> 
> I don't really know Lisp, so I could be wrong.  But my understanding is
> that CL has a 'let' special form that works fine within a function
> definition.  In particular, you should be able to define inner functions
> by binding a name to a lambda, using 'let'.
> 
> So there's nothing really special about the fact that Python (or
> Haskell, ML, etc) can nest function definition.  Of course, Haskell's
> 'let' and 'where' are quite wonderful... even better, syntaxwise, than
> Python's nested 'def's.

It is possible (& allowed) to nest defun forms in Lisp, but it does
not achieve the same effect as nesting def:s in python. defun will
name the function in the global environment, so a nested defun will
still define a top-level function. To define a nested function local
in scope to the surrounding function, one of FLET or LABELS is used.


Björn




More information about the Python-list mailing list