Author: Christian.Queinnec@lip6.fr

## To learn more

The computation model for functional languages is l-calculus, which was invented by Alonzo Church in 1932. Church's goal was to define a notion of effective computability through the medium of l-definability. Later, it became apparent that the notion thus introduced was equivalent to the notions of computability in the sense of Turing (Turing machine) and Gödel-Herbrand (recursive functions). This coïncidence leads one to think that there exists a universal notion of computability, independent of particular formalisms: this is Church's thesis. In this calculus, the only two constructions are abstraction and application. Data structures (integers, booleans, pairs, ...) can be coded by l-termes.
Functional languages, of which the first representative was Lisp, implement this model and extend it mainly with more efficient data structures. For the sake of efficiency, the first functional languages implemented physical modifications of memory, which among other things forced the evaluation strategy to be immediate, or strict, evaluation. In this strategy, the arguments of functions are evaluated before being passed to the function. It is in fact later, for other languages such as Miranda, Haskell, or LML, that the strategy of delayed (lazy, or call-by-need) evaluation was implemented for pure functional languages.
Static typing, with type inference, was promoted by the ML family at the start of the 80's. The web page

### Link

http://www.pps.jussieu.fr/~cousinea/Caml/caml_history.html

presents a historical overview of the ML language. Its computation model is typed l-calculus, a subset of l-calculus. It guarantees that no type error will occur during program execution. Nevertheless ``completely correct'' programs can be rejected by ML's type system. These cases seldom arise and these programs can always be rewritten in such a way as to conform to the type system.
The two most-used functional languages are Lisp and ML, representatives of impure functional languages. To deepen the functional approach to programming, the books [ASS96] and [CM98] each present a general programming course using the languages Scheme (a dialect of Lisp) and Caml-Light, respectively.