Thursday, July 07, 2011

What Are Lambdas?

I'll start with some observations.

First, you can't say you fully understand something until you can explain it to others. Second, whenever you explain something fundamental, you can do so as a totally arbitrary property or in terms of some cognitively fundamental concept. 

Defining numbers as idempotent to sets is pretty fundamental. Defining addition as merging of sets is also fundamental. This is good. Defining these things in terms of Peano axioms is uselessly verbose and obfuscatory besides. This is bad.

Lambdas

Lambdas are just blocks of code. Lambdas DO things. This is a good, simple, cognitively fundamental explanation. The problem with this explanation is it violates every tenet of functional programming. It says lambdas DO something instead of MEANING something.

Since programmers are all idiots and computer "scientists" are even worse evil idiots, they resort to hocus pocus about ISK and lambda calculus. Read above about uselessly verbose and obfuscatory "explanations" of totally arbitrary properties. Summary: these explanations are bad!

So we come to the conclusion that Haskell programmers and computer "scientists" don't know what lambdas are. This is ... totally unsurprising. We have a world chock full of idiots here. A crapsack world from my perspective. A world where just one more drop of evil would lessen the horror I experience at it.

What Lambdas Are

When you finally realize what they are, it's just beautiful. Lambdas are "the meta-relation 'relation'". Everything is a relation in functional programming, and lambdas are the meta-relation. When you apply lambda R, you state the input and output are related through R.

All to say that today I finally learned what lambdas are from an FP perspective. And it's all so laughably trivial. There is something distinctly wrong with your brains that you couldn't have taught me (or anyone) this trivial thing. This trivial thing that properly belongs on the first page of the very first book read by anyone learning functional programming.

What the fuck is wrong with you all? I mean, there are plenty of idiotically written books on OOP that explain objects are "data structures with member functions" whatever the fuck that means. But at least, people understand 'hey, an OBJECT' from their real world experience.

If you losers wanted to avoid explaining what lambdas are, couldn't you have named them oh I don't know 'meta-function'? None of you losers seem able to grasp things for WHAT THEY ARE. How long did it take to rename CAR and CDR as head and tail or CONS cell to Association?

It's like you stare at a plane and think "shiny metal thing with two giant outflying struts each with underslung fast-spinning rotors attached". Fucking autistics, ought all be shot. Or at least get declared as second-class citizens.

Lambdas Are Meta

Lambdas are unavoidably meta. Their meta-ness stares you in the face when you know what lambdas are, because meta-ness is ALL they are. Which functional programmers don't seem to understand since they are all idiots. Or evil idiots. Bureaucrats writing tomes about type theory to pad out their resumes.

I emphasize this point because LISP has no special syntax for lambdas so it makes it appear that the relation 'meta-relation' is a similar kind of thing to other relations. And this blatantly violates a fundamental rule of UI design which states that you must never confuse the level with the meta-level.

I like Smalltalk's Block O' Code syntax - [:variable1 :variable2 | variable1 + variable2]. It's very ... hefty. It's very special. It's very good. It's exactly what it should be. When you stare at it, there is no doubt in your mind "this thing is not like these other things". And it really isn't.

6 comments:

Anonymous said...

Could you please clarify what is so "meta" about lambdas? My understanding of the word "meta" is that a "meta-function" would be a function that takes as an argument and/or returns another function (meaning a higher-order function).

So what about the lambda expression "(lambda (x) (+ x 1))"?

Richard Kulisz said...

You need a dictionary. No, you need a better brain if you think I'm using words exclusively as they're used by programmers.

Anonymous said...

Yeah, by Ruby programmers. So meta, so cool! Everything is meta!
I'm not him, by the way.

Anonymous said...

So, how long did it take you to realise what any semi-competent ape would realise in an order of minutes if he learned how to program properly? Far too long, I suspect.

Complaining about Lisp's syntax is another demonstration of ignorance; if you took even a cursory look at the history of Lisp, you'd realise that it was developed as a mathematical idea, and that its implementation was pretty much an accident. The CAR and CDR functions are named that way because somebody with more brains than you decided to play around with an implementation of Lisp as an interpreted language on an IBM 704 computer of the sort of order of complexity that you'd never understand.

Contents of the Address Register, Contents of the Decrement Register. How fucking hard is it to understand?

(Also, the multiple levels of abstraction needed to properly designate a plane as what it is seems to be far beyond your grasp as well; I have no doubt that your feeble brain couldn't even begin to think at the molecular level while also thinking of the level of an integrated machine. Any ape with a secondary-school level of science could do that, but you're not even an ape.)

Anonymous said...

"Why SHOULD untold numbers of future generations be locked into remembering what the registers of the IBM 704 computer were called?"

Why? Because the people who have done something useful with Lisp - Steele, Sussman, Stallman and others - prefer that terminology. Most of these people have groundings in mathematics, where names which seem simple in terms of English obfuscate the real meaning of the concepts they're trying to describe, especially when it comes to transcribing mathematics into a different language, such as French, German, et cetera.

Meaningful names don't really mean as much as the importance you ascribe to them, at least in most fields of human endeavour - that's not how the English language works. You won't find a person outside of the engineering field who understands the derivation of the word, "carburettor", for instance. Didn't stop the car becoming popular. If the case was different, we'd all be talking in the way that you ascribed to "autistics". For instance, the word "aeroplane" only gives a limited amount of detail as to the operation of the machine. When it comes down to it, language in general is more of a matter of convenience than anything else. The terminology used by hardened Lisp programmers is sufficiently convenient for them; therefore, you have no real place to complain, unless you want to go off and write your own language.

Anonymous said...

U MAD? You totally mad.

Seriously, though, you quite amuse me. For all your bluster and all your vocabulary, all you can do is write profanely and make crude insults instead of addressing the real issue. It's really quite fun to wind you up; you're so predictable that it's like a game of Kulisz Bingo, waiting for you to fire off your next set of buzzwords.

You clearly misinterpreted what I mentioned about Lisp's syntax; in fact, Lisp is convenient - if you're an AI researcher. But as you're not one of those, or a scientist, mathematician or engineer, perhaps a more appropriate language for you, given your love of Meaningful Names, would be COBOL. Or perhaps stacking toy blocks. That seems more in tune with your ostensible intellect.

> It's despicable elitist anti-knowledge.

"A little knowledge is a dangerous thing." A very apt statement, as your self-taught nature has given you a *little* knowledge - but, of course, being self-taught is merely a synonym for having gaps in your knowledge large enough to fit a small frigate through. The metaness of lambdas isn't at all interesting; it's how that applies to the theory of computation as a whole that has actual interesting consequences.

> It's immoral. It's psychopathic. It's EVIL.

Yep, it's a fun weekend activity, along with setting orphanages on fire for the jollies.

Appealing to morality is a dismal way to defend your arguments. First of all, I don't give much of a shit about your peculiar moral system, and even if I was evil - and I don't know whether I am or not - I wouldn't give a shit anyway.

> You're just too much of a fucking retarded engineer reactionary defending his priesthood.

HEY! GUYS! DON'T TELL HIM ABOUT THE SECRET STUFF!

...

WHAT DO YOU MEAN I'M NOT MEANT TO SAY THAT WE HAVE SECRET STUFF?

Sorry, have to depart. Need to put on my robe and exorcise a few VAXen.