Functional languages
A functional language is one that avoids changing the state and mutable data and mainly focuses its statements on the evaluation of code as mathematical functions. So, the entire programming experience is based on functions (or procedures) to construct its program flow.
Note how different this approach is from object-oriented languages for whom everything is an object (some OOP languages have primitive types, such as Java, but, in general, types can always be considered objects).
The next graphic shows some popular Imperative Languages as opposed to pure Functional Languages and the place F# (and Scala) occupy between the two models.
With that in mind, the flow of the program's goal keeps declaring functions that relate or base themselves in other functions until the goal is reached:
A functional language does not have the side-effects of other imperative programming languages since the state does not change and the same call will return the same results as long as...