anchor.diff:  ----
   (def john-smith {:f-name "John"
                    :l-name "Smith"
  -                 :phone "2150041776"
  +                 :phone "215-004-1776"
                    :address {:street "452 Lisp Ln."
                              :city "Macroville"
                              :state "Kentucky"
  
positive.code: 
  [source,clojure]
  ----
  (let [{a :a x :x, :or {x "Not found!"}, :as all} my-map]
    (do
      (println "I got" A "from" all)
      (println "Where is x?" x))
  ;= I got A from {:a "A" :b "B" :c 3 :d 4}
  ;= Where is x? Not found!
  ----
  
  It should be reiterated that the `:as` and `:or` bindings are not creating new values, simply attaching names to existing references and so you should always use `symbols` when using them.
  
  You might have noticed the amount of redundant information in these associative destructuring forms. For each key we've been using, we're just renaming them to their corresponding symbol, making the form a little muddled. This is no good, redundant data is never a good thing. To resolve this, you can use the `:keys` shortcut.
  
  [source,clojure]
  ----
  (let [{:keys [a c]} my-map]
    (println a c))
  ;= A 3
  ----
  
  You can also use `:strs` and `:syms` if the keys in the map aren't actually keywords. I cannot reiterate enough to remember to bind these values to `symbols`, always!
  
  [source,clojure]
  ----
  
negative.code:     (println "x:" x ", y:" y ", z:" z)))
  ----
  
  When defining a function in clojure, destructuring can be applied on the incoming parameters, just like in a let:
  
  [source,clojure]
  ----
  