Why Functional Programming Matters paraphrased — a result of a discussion in an IRC channel. Others may find value.
A program may be represented as a function that accepts some input and produces some outputλ This function may be composed of parts; other functions and values.
Suppose any function that exists. I will suppose one that is made of parts A, B, C and D. I might denote this A ∘ B ∘ C ∘ D. Now suppose you desire a function that is made of parts A, B, C and E. Then the effort required for your function should be proportional to the effort required for E alone.
The closer you are to achieving this objective for any function, the closer you are to the essence of (pure) functional programming. This exists independently of the programming language, though programming languages will vary significantly in the degree to which they accommodate this objective.
Imperative programming — specifically the scope of a destructive update — is the anti-thesis of this objective.
[...] this site being purely a link-dump (although my last post would contradict), but I have to say that Tony Morris’ latest functional post is exceptional. In just a few paragraphs he manages to elucidate the benefits of functional programming in a way [...]
I am not %100 clear on what you mean. What do you mean when you write A ∘ B ∘ C ∘ D, is it that you are describing a ‘calls’ relationship? Such that A calls B calls C calls D (where A is come function with variables included, which not the same as the function at compile time) so that if A calls B calls C calls E we should already know A ∘ B ∘ C and therefore only have to compute E? If that is so then it seems a bit strong to declare that lazy functional programming with memoization is more pure than eager functional languages. Do I have the wrong end of the stick.
@Francis Stephens:
∘ means compose ( http://en.wikipedia.org/wiki/Function_composition ).
A ∘ B ∘ C ∘ D is a function that first applies D to its argument, than applies C to the result, than applies B to that result and finally applies A to that.
[...] contact to the client does not have very much skill in understanding computer programming problems, the notion of software reusability and decomposition and generally advising the client in such a way to ensure that their interests and expectations are [...]