!!! Overview
[{$pagename}] is a [programming] [Architecture] that treats computation as the evaluation of mathematical [functions] and avoids changing-[state] and [mutable|Mutability] [data]. 


[{$pagename}] has no reliance on [data] outside the current [function] __and__ there is no change to [data] that exists outside the current [function]

This is [{$pagename}]:
%%prettify 
{{{
def increment(a):
    return a + 1
}}} /%

This is __NOT__ [{$pagename}]:
%%prettify 
{{{
a = 0
def increment():
    global a
    a += 1
}}} /%

[{$pagename}] has its origins in lambda calculus, a formal system developed in the [1930s] to investigate computability, the Entscheidungsproblem, function definition, function application, and recursion. Many functional programming languages can be viewed as elaborations on the lambda calculus.[2]

!! [idempotent] (ie [Immutable])
[{$pagename}] operations (or service call) should be [idempotent], implying that [clients] can make that same call repeatedly while producing the same result. In other words, making multiple identical requests has the same effect as making a single request. Note that while [idempotent] operations produce the same result on the server (no side effects), the response itself may not be the same (e.g. a resource's [state] may change between requests).

There are also some __caveats__ to remember. (Although we show [HTTP Request], this is applicable to many other [Protocols])

The [HTTP PUT] and [HTTP DELETE] methods are defined to be [idempotent]. However, there is a caveat on [HTTP DELETE] which if successful would normally return a [HTTP 200] (OK) or [HTTP 204] (No Content), will often return a [HTTP 404] (Not Found) on subsequent calls, unless the service is configured to "mark" resources for deletion without actually deleting them. However, when the service actually deletes the resource, the next [HTTP DELETE] will not find the resource to delete it and return a 404. However, the [state] on the server is the same after each [HTTP DELETE] call, but the response is different.

[HTTP GET], [HTTP HEAD], [HTTP OPTIONS] and [HTTP TRACE] methods are only intended for retrieving [data] which makes them [idempotent] as well since multiple, identical requests will behave the same. (Again assuming the [state] of the resource is the same)

!! More Information
There might be more information for this subject on one of the following:
[{ReferringPagesPlugin before='*' after='\n' }]
----
* [#1] - [A practical introduction to functional programming|https://maryrosecook.com/blog/post/a-practical-introduction-to-functional-programming|target='_blank'] - based on information obtained 2017-04-30- 
* [#2] - [Functional_programming|Wikipedia:Functional_programming|target='_blank'] - based on information obtained 2017-04-30-