## What is functional programming?

**Functional programming** is a paradigm (a style of structuring your programs). In essence, the focus is on transforming data with expressions (ideally such expressions should not have side effects). Its name, functional, is based on the concept of a mathematical function (not in sub-routines, methods, or procedures). A mathematical function defines a relation between a set of inputs and outputs. Each input has just one output. For example, given a function, *f(x) = X ^{2}; f(5)* is always

*25*.

The way to guarantee, in a programming language, that calling a function with a parameter always returns the same value, is to avoid accessing to mutable state:

fun f(x: Long) : Long { return x * x // no access to external state }

The `f`

function doesn't access any external state; therefore, calling *f(5)* will always return *25*:

fun main(args: Array<String>) { var i = 0 fun g(x: Long): Long { return x * i // accessing mutable state } println(g(1))...