首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方案:模式匹配语法

方案:模式匹配语法
EN

Stack Overflow用户
提问于 2011-03-07 17:27:37
回答 1查看 121关注 0票数 0

我需要能够像这样匹配模式:

代码语言:javascript
复制
(lambda (<param> ...) <stmt> ...)

使用match-lambda并返回如下内容:

代码语言:javascript
复制
(CLOSURE ENV '(<param> ...) (λ (ENV) <stmt> ...)

其中引用了参数列表。

我能得到的最接近的是:

代码语言:javascript
复制
(`(lambda (,<param> . ,<params>) . ,<stmts>) 
 `(CLOSURE ENV (,<param> . <params>) (lambda (ENV) (,@<stmts>))))

例如,'(lambda (ls1 ls2) (append ls1 Ls2)返回:

代码语言:javascript
复制
'(CLOSURE
  ENV
  (ls1 ls2)
  (lambda (ENV) ((append ls1 ls2))))

但是我拿不到要引用的参数列表。

在对以前的帖子的回答中,我被告知“。必须在列表中的最后一个元素之前。然而,我发现这是不正确的。例如:

代码语言:javascript
复制
(define function-call
  (match-rewriter
   (`(,<func> . ,<args>)
    `(CALL ,<func> (list ,@<args>)))) (+ 1 2) )

返回:

代码语言:javascript
复制
'(CALL + (list 1 2))

其中args清楚地匹配了1和2。

如果有人能给我一些关于如何修复这个模式的建议,我将不胜感激。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-07 21:30:39

您需要将'直接放入输出中。在使用quasiquote时,这可能很棘手,因此我将在回答中避免这种情况。这是你想要的模式和右边:

代码语言:javascript
复制
[`(lambda (,<param> . ,<params>) . ,<stmts>)
 (list 'CLOSURE 'ENV (list 'quote (cons <param> <params>)) 
       (list 'lambda '(ENV) <stmts>))]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5217905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档