Syntax 方案中的模式匹配错误
我已经编写了一个函数Syntax 方案中的模式匹配错误,syntax,scheme,pattern-matching,racket,Syntax,Scheme,Pattern Matching,Racket,我已经编写了一个函数match rewriter,它只是match lambda,除非它在没有找到匹配项时返回其参数匹配重写器是更大功能的一部分。以下是代码的一部分: ((match-rewriter (`(PARAMS: (,<arg>)) `(Success)) (`(,<func> . ,<args>) `(Failure)) )ls) 返回失败 在另一篇帖子中,有人指出这是可行的: #lang racket
match rewriter
,它只是match lambda
,除非它在没有找到匹配项时返回其参数<代码>匹配重写器是更大功能的一部分。以下是代码的一部分:
((match-rewriter
(`(PARAMS: (,<arg>))
`(Success))
(`(,<func> . ,<args>)
`(Failure))
)ls)
返回失败
在另一篇帖子中,有人指出这是可行的:
#lang racket
(match `(PARAMS: (y))
[`(PARAMS: (,var)) 'yep]
[otherise 'nope])
是的
我验证了它的工作原理,但我不明白为什么在match rewriter
中没有匹配相同的模式
奇怪的是,如果我只是手动运行这段代码,将“(PARAMS:(y))替换为“ls”,它就会工作。这让我很困惑
非常感谢您的建议。匹配重写器的定义是什么?
注释
如何使用匹配重写器
?也就是说,第一个代码示例实际运行的是第二个代码示例吗?根据问题的最后一部分(在最近的编辑之后),可能是匹配重写器中存在错误。为什么不把(match rewriter…
替换为(match lambda…(x))
?啊,问题解决了。“((PARAMS:(y))实际上匹配的是一个早期模式,该模式递归地将其引用到后来的模式。将规则在代码中向上移动解决了问题。谢谢你的评论。
#lang racket
(match `(PARAMS: (y))
[`(PARAMS: (,var)) 'yep]
[otherise 'nope])