简单来说,模式匹配就是以确定的结构去「匹配」原数据,
将原数据结构化(将原数据拆分成各个元素,并命名之),
也就得到了对原数据的操作能力

用法呢,要比正则表达式简单多了
可查看 Pattern Matching | Racket Documentation

例如我们要将 '(1 2 3) 其中的元素倒过来,可以这么做:

1
2
3
(match '(1 2 3)
  [(list a b c) (list c b a)])
; => '(3 2 1)

如果要将其中的元素相加呢?

1
2
3
(match '(1 2 3)
  [(list a b c) (+ a b c)])
; => 6

一些例子

如果 0 到 100 闭区间内的数能被 3 整除,则输出该数并标记 *,
如果能被 5 整除,则输出该数并标记 #,
如果既能被 3 整除又能被 5 整除,则输出该数并标记 *#

1
2
3
4
5
6
7
8
9
10
11
12
13
#lang racket
(require math/number-theory)

(define (range-closed start end)
  (range start (+ end 1)))

(for-each (lambda (x)
            (match `(3 ,(divides? 3 x) and 5 ,(divides? 5 x))
              ['(3 #t and 5 #f) (printf "~A*~n" x)]
              ['(3 #f and 5 #t) (printf "~A#~n" x)]
              ['(3 #t and 5 #t) (printf "~A*#~n" x)]
              [else '()]))
          (range-closed 0 100))

过程简洁明了