Clojure

Untitled

May 2nd, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (def asym-hobbit-body-parts [{:name "head" :size 3}
  2.                              {:name "left-eye" :size 1}
  3.                              {:name "left-ear" :size 1}
  4.                              {:name "mouth" :size 1}
  5.                              {:name "nose" :size 1}
  6.                              {:name "neck" :size 2}
  7.                              {:name "left-shoulder" :size 3}
  8.                              {:name "left-upper-arm" :size 3}
  9.                              {:name "chest" :size 10}
  10.                              {:name "back" :size 10}
  11.                              {:name "left-forearm" :size 3}
  12.                              {:name "abdomen" :size 6}
  13.                              {:name "left-kidney" :size 1}
  14.                              {:name "left-hand" :size 2}
  15.                              {:name "left-knee" :size 2}
  16.                              {:name "left-thigh" :size 4}
  17.                              {:name "left-lower-leg" :size 3}
  18.                              {:name "left-achilles" :size 1}
  19.                              {:name "left-foot" :size 2}])
  20.  
  21.  
  22. (defn matching-part
  23.   [part]
  24.   {:name (clojure.string/replace (:name part) #"^left-" "right-")
  25.    :size (:size part)})
  26.  
  27. (defn symmetrize-body-parts
  28.   "Expects a seq of maps that have a :name and :size"
  29.   [asym-body-parts]
  30. ➋   (loop [remaining-asym-parts asym-body-parts
  31.          final-body-parts []]
  32. ➌     (if (empty? remaining-asym-parts)
  33.       final-body-parts
  34. ➍       (let [[part & remaining] remaining-asym-parts]
  35. ➎         (recur remaining
  36.                (into final-body-parts
  37.                      (set [part (matching-part part)])))))))
Add Comment
Please, Sign In to add comment