我正在编写一个名为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”字面打印而不是被评估 - 即使它没有被引用。函数中的其他模式似乎使用完全相同的语法而没有这个问题。此外,未加引号的函数列表 - 追加执行没有问题。
感谢任何建议。
答案 0 :(得分:1)
你有嵌套的反引号:你在CLOSURE
前面有一个,然后在第二个lambda
前面有第二个,而中间没有逗号:注意输出中间的文字反引号。我认为在第二个lambda
之前删除反引用将解决问题。