anchor.diff:  (def my-line [[5 10] [10 20]])
   
   (let [p1 (first my-line)
  -       p2 (second my-line)
  -       x1 (first p1)
  -       y1 (second p1)
  -       x2 (first p2)
  -       y2 (second p2)]
  +      p2 (second my-line)
  +      x1 (first p1)
  +      y1 (second p1)
  +      x2 (first p2)
  +      y2 (second p2)]
     (println "Line from (" x1 "," y1 ") to (" x2 ", " y2 ")"))
  - ;= "Line from ( 5 , 10 ) to ( 10 , 20 )"
  -----
  -
  -This is perfectly valid, but the code extracting and naming the values in the vector obsucring our intent. Destructuring allows us to concisely extract and name important parts of complex data structures to make our code cleaner.
  +;= "Line from ( 5 , 10 ) to ( 10 , 20 )"
  +----
  +
  +This is perfectly valid, but the code extracting and naming the values in the vector obscures our intent. Destructuring allows us to more concisely extract and name important parts of complex data structures to make our code cleaner.
   
   [source,clojure]
   ----
  
positive.code: ;= "Line from ( 5 , 10 ) to ( 10 , 20 )"
  ----
  
  While you can penetrate through as many layers as you need, once you get to the fourth or fifth layer this becomes difficult to read.
  
  When you have nested vectors, you can use `:as` to bind the whole nested vector to a single symbol.
  
  [source,clojure]
  ----
  
negative.code:   (do
      (println a b first)
      (println c d second)))
  ;= 5 10 [5 10]
  ;= 10 20 [10 20]
  ----
  
  == Associative Destructuring
  
  Syntax: `[{symbol-1 :key-a, symbol-2 :key-b} {:key-a "value a" :key-b "value b"}]`
  
  