【发布时间】:2011-07-05 03:15:51
【问题描述】:
我正在编写一个名为 annotate 的函数,该函数使用 match-lambda,通常使用递归调用 annotate。这是模式匹配之一:
(`(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”按字面意思打印而不是被评估——即使它没有被引用。函数中的其他模式似乎使用完全相同的语法而没有这个问题。此外,未引用的函数 list-append执行没有问题。
感谢任何建议。
【问题讨论】:
标签: scheme pattern-matching racket