diff --git a/README.md b/README.md index f13a412..3010dea 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ smart people at [Hashrocket](http://hashrocket.com/). - [Expanding Macros](clojure/expanding-macros.md) - [Open JavaDocs](clojure/open-javadocs.md) - [Quick Clojure Docs](clojure/quick-clojure-docs.md) +- [Reductions](clojure/reductions.md) - [Specify the Directory of a Shell Command](clojure/specify-the-directory-of-a-shell-command.md) - [Splitting On Whitespace](clojure/splitting-on-whitespace.md) - [Swap Two Items in a Vector](clojure/swap-two-items-in-a-vector.md) diff --git a/clojure/reductions.md b/clojure/reductions.md new file mode 100644 index 0000000..9432dde --- /dev/null +++ b/clojure/reductions.md @@ -0,0 +1,25 @@ +# Reductions + +One of the core functions in Clojure is +[`reduce`](https://clojuredocs.org/clojure.core/reduce). It allows you to +build up some result based on applying a function to each value in a +collection. Clojure provides a similar function that builds up a (lazy) +sequence of intermediate values as it is performing a reduce. +This function is +[`reductions`](https://clojuredocs.org/clojure.core/reductions). + +Using `reduce` to sum a collection of integers looks like this + +```clojure +> (reduce + 0 [1 2 3 4 5]) +=> 15 +``` + +whereas `reductions` performing the same task will look like this + +```clojure +> (reductions + 0 [1 2 3 4 5]) +=> (0 1 3 6 10 15) +``` + +h/t Josh Davey