<p>In <ahref="http://en.wikipedia.org/wiki/Computer_science"title="Computer science">computer science</a>, <b>functional programming</b> is a <ahref="http://en.wikipedia.org/wiki/Programming_paradigm"title="Programming paradigm">programming paradigm</a>, a style of building the structure and elements of computer programs, that treats <ahref="http://en.wikipedia.org/wiki/Computation"title="Computation">computation</a> as the evaluation of <ahref="http://en.wikipedia.org/wiki/Function_(mathematics)"title="Function (mathematics)">mathematical functions</a> and avoids <ahref="http://en.wikipedia.org/wiki/Program_state"title="Program state"class="mw-redirect">state</a> and <ahref="http://en.wikipedia.org/wiki/Immutable_object"title="Immutable object">mutable</a> data. Functional programming emphasizes <ahref="http://en.wikipedia.org/wiki/Function_(computer_science)"title="Function (computer science)"class="mw-redirect">functions</a> that produce results that depend only on their inputs and not on the program state—i.e. <ahref="http://en.wikipedia.org/wiki/Pure_function"title="Pure function">pure</a><ahref="http://en.wikipedia.org/wiki/Function_(mathematics)"title="Function (mathematics)">mathematical functions</a>. It is a <ahref="http://en.wikipedia.org/wiki/Declarative_programming"title="Declarative programming">declarative programming</a> paradigm, which means programming is done with <ahref="http://en.wikipedia.org/wiki/Expression_(computer_science)"title="Expression (computer science)">expressions</a>. In functional code, the output value of a function depends only on the arguments that are input to the function, so calling a function <i>f</i> twice with the same value for an argument <i>x</i> will produce the same result <i>f(x)</i> both times. Eliminating <ahref="http://en.wikipedia.org/wiki/Side_effect_(computer_science)"title="Side effect (computer science)">side effects</a>, i.e. changes in state that do not depend on the function inputs, can make it much easier to understand and predict the behavior of a program, which is one of the key motivations for the development of functional programming.</p>