by user8314628
Last Updated December 06, 2018 15:26 PM

I was confusing about the difference between `match`

and `case`

. In the document， it mentions that `match`

supports general pattern matching.

```
> (define (m x)
(match x
[(list a b c)
#:when (= 6 (+ a b c))
'sum-is-six]
[(list a b c) 'sum-is-not-six]))
> (m '(1 2 3))
'sum-is-six
> (m '(2 3 4))
'sum-is-not-six
```

For this example, I thought I could rewrite it using `case`

expression. But seems it's quite complicated. I have to get the length of the input `x`

, and maybe a lambda function to get the sum of the elements of `x`

and compare it with `6`

.

So I guess we prefer `match`

when doing pattern matching. Is it true? Any difference other than that?

You said it yourself, `match`

does *pattern matching* whereas `case`

only checks if a value belongs in one of several lists of possible values.

All that `case`

does is syntax sugar for a `cond`

with multiple conditions, for example:

```
(case (+ 7 5)
[(1 2 3) 'small]
[(10 11 12) 'big]
[else 'other])
```

... is equivalent to:

```
(let ((val (+ 7 5)))
(cond ((or (equal? val 1) (equal? val 2) (equal? val 3))
'small)
((or (equal? val 10) (equal? val 11) (equal? val 12))
'big)
(else 'other)))
```

- Serverfault Help
- Superuser Help
- Ubuntu Help
- Webapps Help
- Webmasters Help
- Programmers Help
- Dba Help
- Drupal Help
- Wordpress Help
- Magento Help
- Joomla Help
- Android Help
- Apple Help
- Game Help
- Gaming Help
- Blender Help
- Ux Help
- Cooking Help
- Photo Help
- Stats Help
- Math Help
- Diy Help
- Gis Help
- Tex Help
- Meta Help
- Electronics Help
- Stackoverflow Help
- Bitcoin Help
- Ethereum Help