map/filter/reduce/lambda opinions and background unscientific mini-survey

Terry Hancock hancock at anansispaceworks.com
Tue Jul 5 10:46:41 EDT 2005


On Tuesday 05 July 2005 08:17 am, Steven D'Aprano wrote:
> Sorry, but you are mistaken. "lambda" is a _reserved_ word in the
> Python language, while "function" etc are not, but they are certainly
> part of the language. Try explaining what def and import do without
> using the words "function" or "module". Maybe you can do it, using
> circumlocutions, but it isn't easy, and costs clarity.

This is still a relevant distinction.   One relevant point is that I am
perfectly free to use, say, the Spanish or Chinese word to describe
"module" or "function", but the keywords "def" and "import" will
remain the same.

> > The second error is that I believe most english speakers COULD provide
> > a definition for the fairly common words "function", "class", and
> > "decorator". The exact meaning of "class" might not be what they expect
> > at first, 
> 
> Function, in the sense of a mathematical function, I agree. Class as in
> the thing you go to at school and decorator as in the person who advises
> you what colour curtains to have, certainly. But in the Python sense? No.
> Especially not decorator, which I believe most _programmers_ would have
> trouble explaining, let alone non-programmer English speakers. I know I do.

The "Python sense" is not arbitrary.  There are very direct visual or logical
(i.e. INTUITIVE) connections between these words' *English* meanings (not
just mathematical, either) and their meanings in Python.

A "Function" is (in English) (kdict-gcide*):
1.) The act of executing or performing any duty, office, or
      calling; performance....
2.) The appropriate action of any special organ or
      part of an animal or vegetable organism...
[...]
5.) (math) A quantity so connected with another quantity,
      that if any alteration be made in the latter there will be
      a consequent alteration in the former.

The programming use is probably *closer* to the English meaning
than the math jargon meaning (except in the sense of "functional
programming" which leans more on the math meaning.

Similarly, "decorate" is 'make more attractive by adding ornament, colour, etc.'
In Python, a "decorator" applies a wrapper to a function to provide it with
some additional functionality.  The function definition is furthermore
"decorated" with the decorator declaration to give it more meaning, which
is arguably more aesthetically pleasing (otherwise, why not literally wrap
with a function after defining the function?).  These meanings are very
connected with the English definition of the word.

"Class" can, of course, mean a room in which you teach classes, but again
Webster's will certainly provide meaning much closer to the programming
term:

1. A group of individuals ranked together as possessing
      common characteristics...

[2 is the class of students sense]

3. A comprehensive division of animate or inanimate objects,
      grouped together on account of their common
      characteristics
4. A set; a kind or description, species or variety.

Meanings 1,3, & 4 are all arguably intimately connected to the OOP meaning,
especially meaning #3 which even mentions "objects". (And I won't bother
to point out that the English meaning of "object" is tied closely to what it
means in programming).

A similar argument can be made for "object", "module", "script", and
even "method" and "program".

Now, if you are armed ONLY with the English definition, you will possibly
run into some trouble, because the programming usage is a *specialization*
of the term -- we strictly take only *one* of the English definitions to apply,
and we narrow its meaning a bit.  "Objects" in computer science never means
"the purpose of the program" nor does it ever refer to "a small brick", even
though the English word can mean both of those things. But it's not exactly
a shocker that a programming term is going to apply to things you can find
in a program, so I don't think we're stumping the newbie with such terms.


"lambda" has no such advantage.  Here's the *entire* gcide definition:

Lambda \Lamb"da\, n. [NL., fr. Gr. la`mbda.]
   1. The name of the Greek letter [Lambda], [lambda],
      corresponding with the English letter L, l.
      [1913 Webster]

   2. (Anat.) The point of junction of the sagittal and lambdoid
      sutures of the skull.
      [1913 Webster]

   3. (Phys.) A subatomic particle carrying no charge, having a
      mass equal to 2183 times that of an electron; it decays
      rapidly, typically forming a nucleon and a pion. --MW10
      [PJC]

   Lambda moth (Zool.), a moth so called from a mark on its
      wings, resembling the Greek letter lambda ([Lambda]).
      [1913 Webster]

> > but exposure to any object oriented language would make the
> > concept quickly familiar. 
> 
> Just as exposure to functional languages would make lambda very familiar.

Yeah, well, there *is* an entry in the "Online Dictionary of Computing":

LAMBDA
        A version of typed lambda-calculus, used to describe
        semantic domains.
        ["Outline of a Mathematical Theory of Computation",
        D.S. Scott, TM PRG-2, PRG, Oxford U, 1971].

If even this means what "lambda" does in Python, I would be surprised,
certainly it doesn't mean a whole lot to me.

> Think back to when you were a schoolboy at your first day of school.
> Unless you had a very unusual upbringing, you probably had never heard the
> word "function" before. 

Total BS.  I knew the word "function" in it's English language sense, probably
by the time I was 6.  I *know* my kids know it.

> There is nothing about the word "function" that
> brings to mind "a mathematical entity which transforms a variable into a
> different variable", 

They'll get this in about the 6th grade, IIRC.

> let alone "a programming subroutine that returns a
> result". 

It also *does something*, which is what my first understanding of a "function"
was.  Side-effects would seem to be perfectly natural to anyone with an
English language background, I guess. ;-)

> (Or for that matter, "the purpose which a person or thing is
> for", as in the function of a spanner is to tighten nuts on bolts.)

You are really stretching if you think kids (let alone average adults) don't
know this meaning of the word "function".

> You had to learn that word, discover what it means, and then it becomes
> familiar. You don't notice the process only because it happened so long
> ago, at an age that your brain was operating in "language acquisition
> mode" and picking up vocabulary at an incredible rate.

If you're arguing that language is acquired rather than innate, you
are bludgeoning an obvious point. The point is that *jargon* should
ideally derive in a natural way from commonly-used language, if
we want it to be easy to acquire for people who don't learn programming
between the ages of 1 and 5 as we learn our native languages.  Even
in the 21st century, I think this includes just about all of us. ;-)

> There is nothing about the word "string" that especially brings to mind
> "an array of bytes representing characters". The analogy of "string of
> characters" to "string of beads" breaks down as soon as you have multiple
> lines of text.

Ah, but that's useful.  "Strings" AREN'T "multiple lines of text" in the
computer's memory, are they?  '\n' is just another bead.  The "multiple
lines" is a representation, or way of laying out the beads.  Very useful
distinction, and immediately driven by the choice of analogy.

I'm going to use that, thanks. ;-)

> And as for float, that's what boats do, heaven only knows
> what it has to do with numbers.

Ah, yes.  Here, it is clear that Fortran whips Python on readability, it
calls them "reals". The only problem is that real mathematicians probably
had conniption fits about the fact that "real" variables actually represent
"rational" numbers.

> (Yes, I know what it has to do with numbers. But that is something I had
> to learn, and even now I still have difficulty because I expect floats to
> operate like mathematical real numbers, and they don't.)
> 
> And dare I say it, what do constricting snakes have to do with programming?

Nothing.  Then again *we* know that "Python" hasn't anything to do
with snakes, either. ;-D

> I won't say that the anonymous function meaning of lambda comes to my mind
> before the Greek letter, but it isn't very far behind, and rapidly
> catching up. (I use lambda a lot more than I speak Greek.) It wouldn't
> surprise me if one day I think of Python programming before the Greek
> letter, just as the world aleph brings to my mind the sense of infinity
> before the sense of it being a Hebrew letter.

Then it is clearly *not you* who should be served by the naming scheme.
Anyone so deeply trained and experienced should be expected to adapt,
you have the wherewithall to do so.  It is the new user for whom the clarity
of the jargon is so important.

Personally, I find the term "anonymous function" to be a whole lot clearer
than "lambda" or "lambda function".  Indeed, if asked what "lambda" means,
my reply is it's a "stupid name for an anonymous function", and if my
listener is less savvy "for a function that doesn't have a name,  because you
only use it once".

Having said that, I too will miss the *concept* of an anonymous function,
although I wouldn't mind at all if its name changed, or if it were somehow
integrated into the "def" keyword's usage.  Using backticks or some other
syntax delimiter also sounds promising, although we're sort of running out
of them. ;-)

--

*An unfortunate acronym for "Gnu Collaborative International Dictionary
of English".
--
Terry Hancock ( hancock at anansispaceworks.com )
Anansi Spaceworks  http://www.anansispaceworks.com




More information about the Python-list mailing list