Я пишу функцию под названием annotate, которая использует match-лямбда, часто с рекурсивными вызовами для аннотирования. Вот одно из совпадений шаблона:
(`(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>))))
В частности, ",(аннотация карты" печатается буквально, а не оценивается, даже если она не заключена в кавычки. Другие шаблоны в функции, по-видимому, используют точно такой же синтаксис без этой проблемы. Кроме того, функция list-append без кавычек выполняется без проблемы.
Любые советы приветствуются.