Map Reduce Sandwich
A common pattern when manipulating lots of data can be described using the Map-Reduce Sandwich analogy.
Write the map reduce sandwich
Write map and reduce functions to create the map reduce sandwich
()
Hint
Define a collection of strings where each string represents an ingredient.
Then you could write a sliced
function that adds the string "sliced" to the start of each ingredient.
You could then use the reduce
function with a function to join all the "sliced ingredient" names into a sandwich (string), perhaps with a comma as a separator interposed between the sliced ingredients.
Our ingredients
["bread" "cucumber" "pepper" "tomato" "lettuce" "onion"]
Slice our ingredients
(defn slice [item]
(str "sliced " item))
Map Slice over the ingredients
(def prepared-ingredients
(map slice ["bread" "cucumber" "pepper" "tomato" "lettuce" "onion"]))
Reduce our ingredients to a sandwich
(defn make-sandwich [ingredients]
(reduce str (interpose ", " ingredients)))
(str "A tasty sandwich made with " (make-sandwich prepared-ingredients))
map-reduce sandwich using a slightly different syntax (threading macro)
(->> ["bread" "cucumber" "pepper" "tomato" "lettuce" "onion"]
(map #(str "sliced " %) ,,,)
(interpose ", " ,,,)
(reduce str ,,,)
(str "I have a tasty sandwich made with " ,,,))