gpt4 book ai didi

match - case 和 match 有什么区别?

转载 作者:行者123 更新时间:2023-12-02 19:28:35 27 4
gpt4 key购买 nike

我对 matchcase 之间的区别感到困惑。在 document ,其中提到match支持通用模式匹配。

> (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

对于这个例子,我想我可以使用 case 表达式重写它。但似乎相当复杂。我必须获取输入 x 的长度,也许还需要一个 lambda 函数来获取 x 元素的总和,并将其与 6 进行比较>.

所以我想我们在进行模式匹配时更喜欢match。这是真的吗?除此之外还有什么区别吗?

最佳答案

你自己也说过,match 确实通用 pattern matching (一个非常强大的概念!)而 case 仅检查一个值是否属于多个可能(隐式引用)值列表之一。 case 所做的只是具有多个条件的 cond 的语法糖,例如:

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

...大致相当于:

(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)))

match 则进行一些复杂的匹配;它检查一个值是否是几种可能的模式之一,它不仅比较值是否相等,还根据模式检查值的类型和“形状”,我​​们甚至可以添加额外的使用#:when 进行约束。要了解这有多复杂,可以在 matchdocumentationgrammar 部分进行检查。 .

关于match - case 和 match 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53649467/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com