与match-lambda匹配的方案模式

时间:2011-02-27 05:31:24

标签: scheme pattern-matching racket

我正在编写一个名为annotate的函数,它使用match-lambda,通常使用renotive调用tonotate。这是模式匹配之一:

(`(lambda (,<param1> . ,<params>) ,<stmts>)
        `(CLOSURE ENV (,<param1> . ,<params>) `(lambda (ENV) ,(map annotate ,(list-append `(,<param1> . ,<params>) `(,<stmts>))))))

list-append只是从它的两个参数中创建新列表。问题是当这个模式匹配时,返回类似于:

的东西
'(CLOSURE
  ENV
  (x)
  `(lambda (ENV)
     ,(map
       annotate
       (<results of list-append>))))

具体来说,“(map annotate”字面打印而不是被评估 - 即使它没有被引用。函数中的其他模式似乎使用完全相同的语法而没有这个问题。此外,未加引号的函数列表 - 追加执行没有问题。

感谢任何建议。

1 个答案:

答案 0 :(得分:1)

你有嵌套的反引号:你在CLOSURE前面有一个,然后在第二个lambda前面有第二个,而中间没有逗号:注意输出中间的文字反引号。我认为在第二个lambda之前删除反引用将解决问题。