Unlambda is one of the more extreme of the performance art programming languages. Its programs are more or less impossible for a human to read, and it is unlikely or impossible that anyone presented with an unlambda program would be able to guess, merely by looking at it, that it is a programming language.

Its conceptual idea, which is unparalleled in its simplicity and purity of essence, is this: Unlambda is the worlds only purely functional programming language. In other words, literally nothing exists but functions. Every function takes one argument, and that argument is a function. Every function returns one value, and that value is a function. Other than the handful of built-in functions, each of which except the output functions is named by a single letter, the only syntactical construct is the ` character, which means "apply the following function to the function after it". Most programs in unlambda are written with no more than `, s, and k, with maybe some outputs and a couple of instances of d or i. Whitespace, if any, is purely arbitrary.

In order that an unlambda program can actually interact with the outside world, a number of special "output" builtins were created. They consist of 256 functions, one for each ASCII character, which print out a single character when evaluated.

Such "simple" things as loops and numbers become very non-trivial in unlambda, and generally require knowledge of lambda calculus to pull off. In fact, the name derives itself from the fact that Unlambda can be described as lambda calculus with the lambda form removed.

Unlambda is inevitably compared to Intercal, but unlike intercal it has a kind of weird elegance; this is because Intercal gets in your way, but Unlambda simply fails to help you.


Update ("and you thought perl6 was bloated!"): Unlambda 3.0 is nearing release, and while it is a bit early to judge *too* much, i am sorry to report that the Unlambda language is now all wussy and stuff. A new syntactic construct besides ` and . and the special "input" functions has been added: $, which provides syntactic sugar that allows you to directly specify a church numeral value by putting its integer value into the program after the $. Even worse, it now explains right in the readme for Unlambda how to create a loop! This is a sad day indeed for those everywhere who were fond of unlambda's strict ignorance of any sort of principles of utility. ::sighs::... damn. If only TECO had referential transparency..