anchor.diff:  [[binding-forms]]
   == Binding Forms (Destructuring)
   
  -Clojure supports abstract structural binding, often called destructuring, in let binding lists, fn parameter lists, and any macro that expands into a `let` or `fn`. A _binding-form_ can be a data structure literal containing symbols that get bound to the respective parts of the __init-expr__. The binding is abstract in that a vector literal can bind to anything that is sequential, while a map literal can bind to anything that is associative.
  -
  -All binding symbols that don't match their respective part due to an absence of data (too few elements in a sequential structure, no key in an associative structure, etc) are bound to nil.
  -
  -=== Vector binding destructuring
  -
  -Vector __binding-expr__s allow you to bind names to parts of _sequential_ things (not just vectors), like vectors, lists, seqs, strings, arrays, and anything that supports https://clojure.github.io/clojure/clojure.core-api.html#clojure.core/nth[`nth`]. The basic sequential form is a vector of __binding-form__s, which will be bound to successive elements from the __init-expr__, looked up via `nth`. In addition, and optionally, `&` followed by a __binding-form__ will cause that __binding-form__ to be bound to the remainder of the sequence, i.e. that part not yet bound, looked up via https://clojure.github.io/clojure/clojure.core-api.html#clojure.core/nthnext[`nthnext`].
  -
  -Finally, also optional, `:as` followed by a symbol will cause that symbol to be bound to the entire __init-expr__:
  +The simplest __binding-form__ in Clojure is a symbol. However, Clojure also supports abstract structural binding called destructuring in `let` binding lists, `fn` parameter lists, and by extension any macro that expands into a `let` or `fn`. Destructuring is a way to create a set of bindings to values within a collection by using an analogous collection as a binding form. A vector form specifies bindings by position in a sequential collection, a map form by key in an associative collection. Destructuring forms can appear anywhere __binding-form__s can, and thus nest, yielding code that is clearer than using collection accessors.
  +
  +__Binding-form__s that don’t match their respective part due to an absence of data (i.e. too few elements in a sequential structure, no key in an associative structure, etc) bind to `nil`.
  +
  +[[sequential-destructuring]]
  +=== Sequential destructuring
  +
  +Vector __binding_form__s sequentially bind values in collections like vectors, lists, seqs, strings, arrays, and anything that supports https://clojure.github.io/clojure/clojure.core-api.html#clojure.core/nth[`nth`]. The sequential destructuring form is a vector of __binding-form__s, which will be bound to successive elements from the __init-expr__, looked up via `nth`. In addition, and optionally, a __binding-form__ following a `&` will be  bound to the remainder of the sequence, i.e. that part not yet bound, and looked up via https://clojure.github.io/clojure/clojure.core-api.html#clojure.core/nthnext[`nthnext`].
  +
  +Finally, also optionally, `:as` followed by a symbol binds that symbol to the entire __init-expr__:
   
   [source,clojure]
   ----
  
positive.code: ->[1 2 3 (4 5 6 7) [1 2 3 4 5 6 7]]
  ----
  
  These forms can be nested:
  
  [source,clojure]
  ----
  
negative.code: ->[5 3 6 {:c 6, :a 5}]
  ----
  
  It is often the case that you will want to bind symbols with the same name as the corresponding map keys. The `:keys` directive addresses the redundancy often found in the binding __binding-form->key__ pairs:
  
  [source,clojure]
  ----
  