Scheme 解释球拍中的模式匹配?

Scheme 解释球拍中的模式匹配?,scheme,pattern-matching,racket,Scheme,Pattern Matching,Racket,我知道模式匹配的要点,即在运行时操作数据结构。我知道模式匹配需要4个参数:要匹配的模式、要匹配的表达式、成功延续和失败延续。然而,在那之后,看着球拍文档我就迷路了。我不明白如何具体地(通过具体的、逐行的、解释过的示例)将其实现到代码中,以及如何使用它。有人能给我解释一下模式匹配的简化版本吗?也许有一个基本的代码可以帮我解决这个问题。有了模式匹配,我们想要分解数据结构,所以我们传入一段数据进行销毁 (match foo ...) 接下来,我们需要指定一个构造函数列表来尝试foo。如果foo

我知道模式匹配的要点,即在运行时操作数据结构。我知道模式匹配需要4个参数:要匹配的模式、要匹配的表达式、成功延续和失败延续。然而,在那之后,看着球拍文档我就迷路了。我不明白如何具体地(通过具体的、逐行的、解释过的示例)将其实现到代码中,以及如何使用它。有人能给我解释一下模式匹配的简化版本吗?也许有一个基本的代码可以帮我解决这个问题。

有了模式匹配,我们想要分解数据结构,所以我们传入一段数据进行销毁

(match foo
   ...)
接下来,我们需要指定一个构造函数列表来尝试
foo
。如果
foo
是由这些构造函数之一构造的,我们将
foo
s字段绑定到指定的变量,并运行相关的块

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

就这样!如果
foo
是由两个元素组成的列表,我们运行
+ab
如果不是,我们运行另一个continuation并打印出
foo
不是列表。

通过模式匹配,我们想要拆分数据结构,所以我们传入一段数据进行解构

(match foo
   ...)
接下来,我们需要指定一个构造函数列表来尝试
foo
。如果
foo
是由这些构造函数之一构造的,我们将
foo
s字段绑定到指定的变量,并运行相关的块

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

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

听起来你可能有一个学校作业来实现模式匹配引擎

如果是这样的话,你可能会发现看这个讲座很有趣


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

听起来你可能有一个学校作业来实现模式匹配引擎

如果是这样的话,你可能会发现看这个讲座很有趣


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

你看过《球拍指南》中的条目吗?它有一些具体的例子。你看过《球拍指南》上的条目吗?它有一些具体的例子。