Pattern matching isn&#x27;t <i>just</i> conditional matching. It&#x27;s also binding, and even some common operations. Compare a naive Haskell map:<p><pre><code>  map f   []   = []
  map f (x:xs) = f x : map f xs
</code></pre>
To a Racket one made without using (match...):<p><pre><code>  (define (map f lst)
    (cond
      [(empty? lst) &#x27;()]
      [else (cons (f (car lst))
                  (map f (cdr lst)))]))
</code></pre>
The former is far more terse, and also more directly resembles a definition of what map actually does. The latter is wordy, because all kinds of things have to be stated in explicit terms, and operations need to be performed manually instead of with simple destructuring binds.<p>This is a mild example too, it gets far, far more useful when you&#x27;re dealing with type&#x2F;struct fields and the like.