解释Racket中的模式匹配?

时间:2013-11-27 05:09:17

标签: scheme pattern-matching racket

我知道模式匹配的要点,您可以在运行时操作数据结构。我知道模式匹配需要4个参数:匹配的模式,匹配的表达式,成功延续和失败延续。然而,在那之后,看看Racket文档,我迷失了。我不明白(具体,逐行,解释的例子)如何将其实现为代码,以及如何处理它。有人可以向我解释模式匹配的一个愚蠢版本,或许有一个基本代码来帮助我吗?

2 个答案:

答案 0 :(得分:3)

通过模式匹配,我们希望拆分数据结构,因此我们传入一段数据来破坏

(match foo
   ...)

接下来,我们需要指定一个构造函数列表来尝试foo。如果foo由其中一个构造函数构造,我们将foo个字段绑定到指定的变量并运行关联的块。

(match foo
  [(list a b) (+ a b)]
  [_          (displayln "Hey that's not a list!")])

就是这样!如果foo是两个元素的列表,我们会运行+ a b,如果没有,我们运行另一个延续并打印foo不是列表。

答案 1 :(得分:3)

听起来好像你有一个学校作业来实现模式匹配引擎?

如果是这样,你可能会发现观看这个讲座很有意思4A: Pattern Matching and Rule-based Substitution

讲座是由一些似乎知道他在说什么的人讲的。他谈到了概念,如何将问题分解成更小的部分,甚至展示了许多代码样本。