# Functional Programming

Functional Programming is a Programming Paradigm in which programs are mostly built by applying and composing functions.

## Reducer

A reducer is a function that iterates over a list, applying a certain operation to all elements. On each call, it sends the previous result as well as the next element on the list. Only the last result is preserved.

Iterative:

``````def reduce(fn, lst):
res = lst
for x in lst[1:]:
res = fn(res, x)
return res
``````

Recursive:

``````def reduce(fn , lst):
if len(lst) == 1:
return lst
else:
return fn(lst, reduce(fn, lst[1:]))
``````

## Filter

A filter receives a predicate and a list and then it checks for the elements that satisfy the predicate. Only those are returned.

Iterative:

``````def filter(fn, lst):
res = []
for x in lst:
if fn(x):
res = res + [x]
return res
``````

Recursive:

``````def filter(fn, lst):
if lst == []:
return lst
elif fn(lst):
return [lst] + filter(fn, lst[1:])
else:
return filter(fn, lst[1:])
``````

## Map

A map transforms a certain list by applying the same operation to all elements.

Iterative:

``````def map(fn, lst):
res = list()
for e in lst:
res = res + [fn(e)]
return res
``````

Recursive:

``````def map(fn, lst):
if lst == []:
return lst
else:
return [fn(lst)] + map(fn, lst[1:])
``````