[toronto-lisp] Lambda question
amatijaca at gmail.com
Sat Oct 16 21:01:01 UTC 2010
All excellent answers thank you so much. It all makes much more sense
now. I did use these kinds of anonymous functions already in other
languages for similar applications.
Sent from my iPhone
On 2010-10-16, at 12:14, Christopher Browne <cbbrowne at gmail.com> wrote:
> On Fri, Oct 15, 2010 at 11:39 PM, Aleksandar Matijaca
> <amatijaca at gmail.com> wrote:
>> Hi there,
>> a quick question - I have a reasonably firm understanding of how lambda
>> functions work, however, I cannot immediately see why you would want to
>> use one, when you can write a perfectly good NAMED function instead...
>> So under which circumstances would you absolutely want to use a lambda
>> function and why, and under which circumstances would you absolutely
>> NOT want to use a lambda function..
>> Thanks, Alex.
> Let me point at the converse position.
> If you have a function that isn't going to be reused, or which is only
> to be referenced from a particular place in your code, why do you want
> waste your function namespace on giving a name to that function?
> The word "lambda" muddies matters a bit, as it sounds somewhat
> magical. Smalltalk calls the analogous thing an "anonymous block,"
> which is a small step away from "anonymous function," which is a more
> nicely descriptive term.
> PostgreSQL recently introduced "anonymous functions"
> which are billed as a good thing as they mean the database doesn't
> need to get cluttered up with maintenance functions that were supposed
> to go away almost immediately anyways.
> Requiring that functions have names imposes some burdens, particularly
> for maintenance-like activities:
> - You need to come up with a name that isn't already there (lest you
> overwrite something, and make others unhappy)
> - You use that name... Which is well and fine...
> - Something needs to come by later to clean that name and function
> out, and it surely needs to use the right name (lest you drop the
> WRONG function!)
> Anonymous functions do not impose any of this clutter.
> - You pass a reference to the function to whatever needs it, so it is
> only accessible to "legitimate" users of the function.
> - Whether by lexical or dynamic scope, the function can go away, with
> assurance of safety, once it is no longer needed.
> - You don't need to come up with a naming convention if it has no name.
> - No clutter in the namespace if the function does not occupy a name
> in the namespace.
> And effectively, what Lisp is doing is to separate two activities:
> a) Creating a function, and
> b) Naming a function.
> Creating a function *ALWAY* involves LAMBDA, behind the scenes; it may
> be hidden by macros, but every function is a "lambda function."
> Some functions get named (as in b).
> Lisp doesn't force you to name a function merely because you're creating it.
More information about the toronto-lisp