anchor.diff:  
   (print-contact-info john-smith)
   ;= John Smith is the Sith Lord of Git at Functional Industries
  -;= You can reach him at 215-004-1776
  +;= You can reach him at 555-555-5555
   ;= He lives at 452 Lisp Ln. Macroville Kentucky 81321
   ;= Maybe you can write to him about running or hiking
   ----
  +
  +== Macros
  +
  +Macro writers may find the need to write a macro that incorporates destructuring. The most common way to do so is to produce a call to something that already does destructuring (like `let`, `loop`, `fn`, etc). Some examples of this in `clojure.core` include `if-let`, `when-let`, `when-some`, etc. 
  +
  +However, in rare cases you might want to instead resolve the destructuring yourself in a macro. In this case, use the (undocumented) `clojure.core/destructure` function, which implements the destructuring logic and is what `let` and `loop` actually invoke. The `destructure` function is designed to be invoked in a macro and expects to take a form and return a form:
  +
  +[source,clojure]
  +----
  +(destructure '[[x & remaining :as all] numbers])
  +;= [vec__1 numbers
  +;=  x (clojure.core/nth vec__1 0 nil)
  +;=  remaining (clojure.core/nthnext vec__1 1)
  +;=  all vec__1]
  +----
  +
  +The result was formatted here to give it a little more clarity. This example should also give you some insight into how destructuring works under the hood.
positive.code: 
  [source,clojure]
  ----
  (let [[first second third fourth fifth sixth] names]
    (println first)
    (println second third fourth fifth sixth))
  ;= Michael
  ;= Amber Aaron Nick Earl Joe
  ----
  
negative.code: 
  [source,clojure]
  ----
  (let [[item1 :as all] names]
    (println "The first name from" all "is" item1))
  ;= The first name from [Michael Amber Aaron Nick Earl Joe] is Michael
  ----
  
  