Deconstruction, or structural matching, is a mechanism that structurally match lisp values with patterns. For instance:

A       (1 . 2) -> A = (1 . 2)
(A . B) (1 . 2) -> A = 1, B = 2

Deconstruction works by first matching a lisp value with a pattern, and then associating named variables with the corresponding element in the value. Named variables that cannot be matched are set to NIL.

Matched variables are made available in the local closure of the execution context. As such, the following statements are functionally equivalent:

(def ((A . B)) (prinl A B))

(def (X)
  (let (((A . B) . X))
    (prinl A B)))