We have discussed how functional programs are essentially a number of functions that work together, this is called composition (functional composition).
This expression is common in the Lisp & Clojure languages. Occasionally the created expressions can becomes challenging to read. To overcome this parsing complexity, developers often break down a more complex expression into its parts, extracting code into its own function.
Note Brake down the above example into each expression that gives a value
(range 5) (map inc (range 5)) (reduce + (map inc (range 5))) (* 10 (reduce + (map inc (range 5)))) ;; Additional examples ;; Use a let expression for code that is used more than once in a function (let [calculated-value (* 10 (reduce + (map inc (range 5))))] calculated-value) ;; Use defn to define a function for code that multiple functions will call ;; and generalise the function with arguments (defn common-data-calculation [certainty-factor scope] (* certainty-factor (reduce + (map inc (range scope)))))