Functional programing drives from lambda Calculus. If you truly want to understand Functional programing check out http://worrydream.com/AlligatorEggs/
It is a "fun" way to learn lambda Calculus and bring you into the exciting world of Functional programming!
How knowing Lambda Calculus is helpful in functional programming.
So Lambda Calculus is the foundation for many real-world programming languages such as Lisp, Scheme, ML, Haskell,....
Suppose we want to describe a function that adds three to any input to do so we would write:
plus3 x = succ(succ(succ x))
Read “plus3 is a function which, when applied to any number x, yields the successor of the successor of the successor of x”
Note that the function which adds 3 to any number need not be named plus3; the name “plus3” is just a convenient shorthand for naming this function
(plus3 x) (succ 0) ≡ ((λ x. (succ (succ (succ x)))) (succ 0))
Notice we use the lambda symbol for a function (I think it looks kind of like an Alligator I'm guessing thats where the idea for Alligator eggs came from)
The lambda symbol is the Alligator (a function) and the x is its color. You can also think of x as an argument (Lambda Calculus functions are really only suppose to have one argument) the rest you can think of it as the body of the function.
Now consider the abstraction:
g ≡ λ f. (f (f (succ 0)))
The argument f is used in a function position (in a call).
We call g a higher-order function because it takes another function as an input.
You can think of the other function calls f as "eggs".
Now taking the two functions or "Alligators" we have created we can do something like this:
(g plus3) = (λ f. (f (f (succ 0)))(λ x . (succ (succ (succ x))))
= ((λ x. (succ (succ (succ x)))((λ x. (succ (succ (succ x)))) (succ 0)))
= ((λ x. (succ (succ (succ x)))) (succ (succ (succ (succ 0)))))
= (succ (succ (succ (succ (succ (succ (succ 0)))))))
If you notice you can see that our λ f Alligator eats our λ x Alligator and then the λ x Alligator and dies. Then our λ x Alligator is reborn in the λ f's Alligator eggs. Then the process repeats and the λ x Alligator on the left now eats the other λ x Alligator on the right.
Then you can use this simple set of rules of "Alligators" eating "Alligators" to design a grammar and thus Functional programming languages were born!
So you can see if you know Lambda Calculus you will understand how Functional Languages work.