如何在球拍中让表达式进行模式匹配?

时间:2015-11-16 04:14:30

标签: functional-programming scheme pattern-matching racket

我们说我有以下代码:

(let ([a 3]
      [b 4])
  (+ a b))

要匹配此表达式,请尝试:

(match exp
  (`(let ([,id ,val] ...) body)  <code for handling this>)

我希望ida匹配,而val将匹配3

id(a b)匹配,而val则与(3 4)匹配。

有什么方法可以实现第一种情景吗?

1 个答案:

答案 0 :(得分:0)

从语法 - 看起来你想要使用印第安纳风格的模式匹配器。 这里有一个到Racket的端口。保存&#34; imatch.rkt&#34;在与文件相同的文件夹中,然后使用(require "imatch.rkt")

https://github.com/soegaard/indiana

文档:http://www.cs.indiana.edu/chezscheme/match/

另一种方法是在Racket中使用旧式模式语法。

使用(require mzlib/match)获取旧语法。 文档在这里:http://docs.racket-lang.org/mzlib/mzlib_match.html