Today computer architecture changes quickly. From a multi-core computer to a large scale cluster, we are leaving the Von Neumann architecture. The evolution of computer hardware generates new problems in the programming world. There are solutions, but well-known imperative languages still have a hard time tackling the parallelism challenge. Functional programming already has very good primitives to solve these problems.
Functional programming is derived from the Lambda Calculus which in turn is very close to Pi Calculus. These languages have been used to study computer science for decades, especially the problems of concurrency and parallelism. Thus functional programming languages avoid many common pitfalls, because they are rooted in the programming language researcher community.
Functional languages, like Erlang ([1], [2]), provide new solutions to the current shift to parallelism everywhere.