# Functional Snippet #5: Reduce

One of the most popular functions among functional programmers is `reduce` (in other languages also sometimes known as `fold`). The `reduce` function operates on an array, takes an initial value, and combines each element with that value. For example, to sum an array of integers, we can define a function `sum` that takes an initial value of `0` and then combines the intermediate results using the `+` operator.

``````let sum: [Int] -> Int = { \$0.reduce(0, combine: +) }
``````

To calculate the product, we can use the same approach with an initial value of `1` and the multiplication operator.

``````let product: [Int] -> Int = { \$0.reduce(1, combine: *) }
``````

However, reduce does not just work on lists of integers. We could also write a function that checks if all `Bool`s in a list are true.

``````let all: [Bool] -> Bool = { \$0.reduce(true, combine: { \$0 && \$1 }) }
``````

Reduce is very flexible, and you can use it on lists with any element type. It is even possible to define `map` and `filter` in terms of reduce, which is a good exercise if you’d like some practice.

## recent posts

• ### Open-Sourcing The Swift Talk Backend

Now written in Swift. π«

• ### Swift Tip: An NSScanner Alternative

Scanning without a Scanner

• ### Swift Talk for Teams

Share Swift Talk with your team with our improved team subscriptions.