The imperative and functional programming paradigm

1. Models of computation In Turing (1937) a characterization is given of those functions that can be computed using a mechanical device. Moreover it was shown that some precisely stated problems cannot be decided by such functions. In order to give evidence for the power of this model of computation, Turing showed in the same paper that machine computability has the same strength as definability via �-calculus, introduced in Church (1936). This model of computation was also introduced with the aim to show that undecidable problems exist. Turing Machine computability forms a very simple model that is easy to mechanize. Lambda calculus computability, on the other hand, is a priori more powerful. Therefore it is not obvious that it can be executed by a machine. As Turing showed the equivalence of both models also �-calculus computations can be performed by a machine and also Turing Machine computations are powerful. This gave rise to the combined Church-Turing Thesis The notion of intuitive computability is exactly captured by �-definability or by Turing computability. Computability via Turing machines gave rise to Imperative Programming. Computability described via �-calculus gave rise to Functional Programming. As imperative programs are more easy to run on hardware, this style of software became predominant. We present major advantages of the functional programming paradigm over the imperative one, that are applicable, provided one is has the mental capacity to explicitly deal with simple abstractions.