I'm learning functional programming with Clojure, and want to deepen my theoretical understanding of functional paradigm (not just the syntax of Clojure).
I'm looking for axioms or formulas how each functional techniques like recursion, map, reduce, cons, first ans rest relates to each other, which is derivable/composable from which, and which is the ultimate axiom behind everything.
For example, I realized map could be implemented only using recur, first, rest and cons functions, and of course the mapping function itself passed to map.
After that, I also realized map could be also implemented using reduce, and again reduce could be implemented using recur, first and rest. Also filter could be implemented with reduce.
I feel like I start to wrap my head around functional programming, but it is still hard to see which are the most ultimate building blocks, i.e. which is the minimum set of abstractions or keywords to compose arbitrary function. With the map example, the second method uses one less abstraction to target the same goal. So, what are some ultimate axioms of functional paradigm to help me see the big picture?
mapcan also be replaced withfor- Alan Thompson