## Introduction

Basically, destructuring allows you to create local bindings in a very succint (and elegant) syntax.

In this article, we will demonstrate the basics of destructuring in clojure, using KLIPSE.

## Destructuring a vector

The simplest example is destructuring the first `n` values of a vector:

``````(def point [5 7])

(let [[x y] point]
{:x x
:y y})
``````

A more advanced example is splitting a vector into a `head` and a `tail`:

``````(def indexes [1 2 3])

(let [[x & more] indexes]
{:x x :more more})
``````

Itâ€™s also worth noticing that you can bind the entire vector to a local using the `:as` directive.

``````(def indexes [1 2 3])

(let [[x & more :as full-list] indexes]
{:x x :more more :full-list full-list})
``````

## Destructuring a map

Simple destructuring on a map is as easy as choosing a local name and providing the key.

``````(def point {:x 5 :y 7})

(let [{the-x :x the-y :y} point]
{:x the-x :y the-y})
``````

As the example shows, the values of `:x` and `:y` are bound to locals with the names `the-x` and `the-y`.

Usually, you want to create locals with the same name as the keys of the map.

In this case, the syntax becomes even simpler, using the `:keys` directive:

``````(def point {:x 5 :y 7})

(let [{:keys [x y]} point]
(+ x y))
``````

As with vectors, you can bind the entire map to a local using the `:as` directive.

Here is how to combine `:keys` and `:as`.

``````(def point {:x 5 :y 7})

(let [{:keys [x y]} point]
(+ x y))
``````

And here is how to combine destructuring of vectors and maps (thank you Paul Salaberria):

``````(let [[[one :as vec-one]
[{:keys [k] :as themap} :as vec-two] :as x]
[[1] [{:k "val"}]]]
{:x x
:one one
:vec-one vec-one
:k k
:themap themap
:vec-two vec-two})
``````

In the next article, we will show more advanced usages og destructuring in clojure.