方案中的模式匹配错误
我编写了一个 match-rewriter
函数,它只是 match-lambda
,只不过如果没有找到匹配项,它会返回其参数。 match-rewriter
是一个更大函数的一部分。这是代码的一部分:
((match-rewriter
(`(PARAMS: (,<arg>))
`(Success))
(`(,<func> . ,<args>)
`(Failure))
)ls)
此函数调用:
(annotate '(PARAMS: (y))
返回失败
在另一篇文章中有人指出这有效:
#lang racket
(match `(PARAMS: (y))
[`(PARAMS: (,var)) 'yep]
[otherise 'nope])
返回是的
我验证了它的工作原理,但我无法弄清楚为什么相同的模式在 匹配重写器
。
奇怪的是,如果我只是手动运行此代码,用 '(PARAMS: (y)) 替换“ls”,它就可以工作。这真的让我很困惑。
任何建议表示赞赏。
I have written a function match-rewriter
that is just match-lambda
except that it returns its argument if no match is found. match-rewriter
is part of a larger function. Here is a portion of the code:
((match-rewriter
(`(PARAMS: (,<arg>))
`(Success))
(`(,<func> . ,<args>)
`(Failure))
)ls)
This function call:
(annotate '(PARAMS: (y))
returns Failure
In another post someone pointed out that this works:
#lang racket
(match `(PARAMS: (y))
[`(PARAMS: (,var)) 'yep]
[otherise 'nope])
returning yep
I verified that it works but I can't figure out why the same pattern isn't being matched in match-rewriter
.
Strangely, if I just run this code manually substituting '(PARAMS: (y)) for "ls" it works. Which really confuses me.
Any advice is appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论