This is starting to get into the details, but the mathematical foundation for pure functional programming languages may be considered the lambda calculus, invented by Alonzo Church. The lambda calculus defines three very simple rules for how complex expressions can be reduced to simpler ones. A...
In a programming language like Java, you write down the series of steps you need to go through to do something. You tell the computer WHAT to do. In functional languages, you write down an expression for the computer to EVALUATE. How the expression should be evaluated is up to the computer...
One issue is that threads are not really a functional concept. A major difference between functional and non-functional programming is that functional programming is timeless. Execution of functional programs consists (in principle, anyway) of reducing expressions to simpler form. But that...