我们说我有以下代码:
(let ([a 3]
[b 4])
(+ a b))
要匹配此表达式,请尝试:
(match exp
(`(let ([,id ,val] ...) body) <code for handling this>)
我希望id
与a
匹配,而val
将匹配3
但id
与(a b)
匹配,而val
则与(3 4)
匹配。
有什么方法可以实现第一种情景吗?
答案 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