Cristian wrote: > [...] Specifically, he's having trouble > thinking of functions as first order data (don't worry, I haven't > confused him with such terminology yet). [...] > And, after we finally > get a hold of first order functions, we appreciate its incorporation > into languages. It would be a shame if my friend just learns the > motions and never incorporates first order functions into his > programs.
The terminology I've heard for this is that functions are "first-class values". There's a minor name-collision on "class", but people have heard "first-class" in other contexts, and it means the same thing here: no second-class status for such values. "First order" has other usages, some contradicting what you mean. First-order functions are exactly those that cannot take functions as arguments. It would be a shame if your friend never incorporates *higher order* functions. [http://en.wikipedia.org/wiki/Higher-order_function] [...] > my_function = function(foo, bar): pass > an_instance_method = function(self, foo): pass > a_method_declaration = method(self, foo): pass I just argued for adopting mainstream terminology, but here I like yours better. The keyword "lambda" sucks. All the other keywords, having been so carefully chosen to relate to their conversational usage, have mis-trained to look at this spelling-out of the name of an arbitrary symbol. Alonzo Church's calculus used the *symbol*. He just needed it to be distinct. Could as well have been the '$-calculus'. Function-as-value is not a trivial concept. I remember wrestling with it, and I've seen many others do the same. The 'lambda' keyword is so awful as to pass for deep mystery long after students have grasped first-class functions. "function" would be a much better keyword. Or follow ML and abbreviate to "fn", or choose another term that clues one in to the meaning. I'd have caught on much quicker given a a hint to read: lambda x, y: x + y as: "the function of two variables, call them x and y, that returns x + y." --Bryan -- http://mail.python.org/mailman/listinfo/python-list